nginx + php-fpm 으로 PHP 만 File not found.

2567 단어 php-fpmnginx
Amazon Linux 2에서 nginx + php-fpm 구성을 처음부터 만들 때
nginx가 php 파일 일 때만 File not found.을 반환하여 곤란했기 때문에,
원인을 조사하는 방법을 기록해 둡니다.

또한 nginx 에러 로그에 다음 출력이 있다고 가정합니다.
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, ...

가능한 원인


File not found.가 표시되면 아마 다음 중 하나입니다.
  • nginx 설정이 이상합니다.
  • SCRIPT_FILENAME , fastcgi_pass

  • php-fpm 설정이 이상합니다.
  • 실행 사용자 등


  • 확인하는 것, 조사 방법



    nginx



    document root 아래 디렉토리, 파일에 대한 nginx 읽기 권한이 있다고 가정합니다.
  • index.html를 문서 루트에 넣고 해당 요청에서 의도 한 내용이 반환되는지 여부. add_header 지시문을 추가하면 의도 한 응답 헤더가 반환되는지 여부.
  • ↑와 같은 디렉토리에 index.php를 두어 File not found.가 될지 어떨지.
  • (↑php-fpm까지 건너 있지만 php-fpm에서 지정한 PHP 파일을 참조할 수 없다는 상태?)

  • 확장자 .php에 대한 location 지시문 설정을 확인합니다.
  • fastcgi_pass에 지정된 경로에서 php-fpm이 대기 중입니까?
  • SCRIPT_FILENAME의 값이 맞습니까?
  • root의 값이 /var/www/html/current/public이면 /var/www/html/current/public/index.php가 존재하는지 여부.



  • php-fpm


    /etc/php-fpm.d/*.conf에서 access.log 지정되어 있다고 가정합니다.
  • 액세스 로그에서 nginx의 document root 이후 파일 경로 (예 : /index.php)가 요청되었는지 확인합니다. (nginx → php-fpm의 소통이 의도대로 되어 있는지 여부)
  • php-fpm 실행 사용자가 의도 한 것인지 여부. (php-fpm → PHP 파일이 있는지 여부)
  • user, group 또는 listen.owner, listen.group가 nginx의 실행 사용자/그룹인지 여부.
  • ps aux | grep php-fpm 등으로 실제로 실행중인 사용자를 확인합니다.



  • 이번 자신의 경우는, php-fpm 의 실행 유저/그룹이 nginx 가 되어 있지 않은 것이 원인이었습니다.
    문서 루트 부하를 작성자 또는 nginx 그룹 만 읽을 수 있도록 설정했지만
    php-fpm 실행 사용자가 nginx 그룹이 아니기 때문에 php-fpm이 PHP 파일을 읽을 수없는 것 같습니다.
    /etc/php-fpm.d/ 아래에 www.confwww-override.conf를 배치하고,www-override.conf에서 user, groupnginx로 지정했지만 실제로는 www.conf의 내용 (apache)이 채택되었습니다.
    파일을 가로 지르는 동일한 pool에 대한 설정을 덮어 쓸 수 있다고 생각했지만 다르다
    아니면 www.conf가 나중에 읽혔습니까?

    좋은 웹페이지 즐겨찾기