nginx와 php-fpm의 구성으로 톱 페이지 이외가 404가 되는 문제 해결

2708 단어 php-fpmnginx

문제점


  • grav라는 경량 CMS를 이용하여 사이트를 시작했는데, 톱 페이지 例: http://ドメイン/ 는 정상적으로 표시되지만, 하위 폴더 例: http://ドメイン/blog 가 404 에러가 되어 버리는 문제가 발생.
  • 구성:

  • 각 버전은 다음과 같습니다.
  • nginx 1.14
  • php 7.2


  • 원인


  • nginx 의 routing 설정으로, 서브 폴더가 지정되었을 경우에, php-fpm 에 처리를 날리지 않았던 것이 원인.

  • 원인 코드


    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.php index.html index.htm;
        server_name _;
    
        location / {
            try_files $uri $uri/ =404; # <--ここで 404 判定されている
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
    }
    
  • php-fpm 에 처리를 건네주기 전에 nginx 가 404 를 돌려주고 있는 것으로부터, location / 안에서 404 로 판정되어 버리고 있다, 가 된다.

  • 대처



    대처방침


  • grav가/blog로 요청되면/index.php가 처리를 받고 내부 처리를 수행하는 흐름입니다.
  • 어쨌든 php-fpm 에 처리를 건네주지 않는 것은 이야기가 되지 않으므로, 처리를 건네주고, 그리고 처리용의 스크립트는 index.php 인 것을 명시시켜 둔다.

  • 조치 코드


    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.php index.html index.htm;
        server_name ドメイン;
    
        location / {
            try_files $uri $uri/ @grav;
        }
    
        location ~ \.php$ {
            try_files $uri $uri/ @grav;
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
    
        location @grav {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
            fastcgi_param SCRIPT_FILENAME  /var/www/html/index.php;
            include fastcgi_params;
        }
    }
    

    해설


  • location /에서 대상 파일이 없으면 @grav로 처리를 전달하도록 변경됩니다.
  • location @grav에서 php-fpm을 작동시킵니다. 그 때에 파라미터로서 SCRIPT_FILENAME 로 index.php 가 처리용 스크립트인 것을 명시해 둔다.

  • 참고로 한 사이트


  • nginx + php-fpm으로 설정했지만 index.php에 액세스하면 NOT FOUND (404)가됩니다.
  • nginx에서 WordPress의 Permalink 형식을 변경하면 404
  • 좋은 웹페이지 즐겨찾기