Laravel에서 루딩했지만 홈 화면 이외의 404 오류

소개



Docker로 환경 구축을 해, 개발을 진행해 막 브라우저에서 확인하려고 하면 개발한 어느 페이지에 리퀘스트를 보내도 404 에러 밖에 돌아오지 않는다.
http://localhost/ 에 요청을 보냈을 때만은 친숙한 Welcome 화면(아래의 화면)은 표시된다.
라는 에러에 직면했으므로, 망비록으로서 남겨 둡니다.



개발 환경




언어·도구 등
버전


PHP
7.2.26

라라벨
5.11.0

nginx
1.17.7

도커
19.03.5


라우팅 확인


$ php artisan route:list

+--------+----------+----------------+---------+-----------------------------------------------+-------------+
| Domain | Method   | URI            | Name    | Action                                        | Middleware  |
+--------+----------+----------------+---------+-----------------------------------------------+-------------+
|        | GET|HEAD | /              |         | Closure                                       | web         |
|        | GET|HEAD | authors/create |         | App\Http\Controllers\AuthorsController@create | web         |

http:localhost/authors/create 페이지에 GET 메소드를 요청하고 있는 부분은 적절하게 라우팅되고 있어 특히 문제가 없는 것 같다. . .

권한 확인


$ ls -l

-rw-r--r--   1 root root   4455 Feb  1 11:49 README.md
drwxr-xr-x  10 root root    320 Feb  1 11:55 app
-rw-r--r--   1 root root   1686 Feb  1 11:49 artisan
drwxr-xr-x   4 root root    128 Feb  1 11:49 bootstrap
-rw-r--r--   1 root root   1531 Feb  1 11:55 composer.json
-rw-r--r--   1 root root 184470 Feb  1 11:55 composer.lock
drwxr-xr-x  15 root root    480 Feb  1 11:49 config
drwxr-xr-x   7 root root    224 Feb  1 11:49 database
drwxr-xr-x 723 root root  23136 Feb  1 11:39 node_modules
-rw-r--r--   1 root root 455603 Feb  1 11:55 package-lock.json
-rw-r--r--   1 root root   1113 Feb  1 11:55 package.json
-rw-r--r--   1 root root   1513 Feb  1 11:52 phpunit.xml
drwxr-xr-x   9 root root    288 Feb  1 11:49 public
drwxr-xr-x   6 root root    192 Feb  1 11:49 resources
drwxr-xr-x   6 root root    192 Feb  1 13:52 routes
-rw-r--r--   1 root root    563 Feb  1 11:49 server.php
drwxr-xr-x   5 root root    160 Feb  1 11:49 storage
-rw-r--r--   1 root root     82 Feb  1 11:03 tailwind.config.js
drwxr-xr-x   6 root root    192 Feb  1 11:54 tests
drwxr-xr-x  41 root root   1312 Jan 30 14:21 vendor
-rw-r--r--   1 root root    712 Feb  1 11:55 webpack.mix.js

퍼미션에 관해서도 rw가 부여되고 있으므로 특히 문제는 없을 것 같다.

nginx 설정



결론적으로 nginx 설정에 문제가있었습니다.
location 지시문에서 index index.html index.php;
이것으로는 index.html과 index.php밖에 열지 않는다고 하는 설정이 되어 버리는군요.

적절하게는, URI의 패스 마다의 패스를 지정해 줄 필요가 있었군요.
따라서 location 지시문을 아래에 수정하면 무사히 응답이 반환되었습니다.
location / {
  try_files $uri $uri/ /index.php?$query_string;
}

수정 전 default.conf
server {
  listen 80;
    index index.php index.html;
    root /var/www/public;

  location / {
    index  index.html index.php;
    }

  location ~ \.php$ {

    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass php:9000;
    fastcgi_index index.php;
    include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
  }
 }


수정 후 default.conf
server {
  listen 80;
    index index.php index.html;
    root /var/www/public;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
    }

  location ~ \.php$ {

    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass php:9000;
    fastcgi_index index.php;
    include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
  }
 }

좋은 웹페이지 즐겨찾기