Nginx + php5-fpm =“파일을 찾을 수 없습니다”


14

nginx / fpm을 사용하여 사이트를 설정하는 동안 벽을 쳤습니다. 페이지에 "파일을 찾을 수 없음"이 표시되고 nginx error.log에 나타납니다.

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

나는 nginx와 fpm을 처음 사용했으며 그 오류 메시지는 나에게 아무런 의미가 없습니다 (Google 시스템조차도 도움이되지 않았습니다!). 누구나 일어날 수있는 일에 빛을 비출 수 있습니까?


PHP 처리를 정의하는 곳에 nginx 설정의 일부를 추가 할 수 있습니까?
Christopher Perrin

나를 위해 다음 기사가 도움이되었습니다 : nginxlibrary.com/resolving-no-input-file-specified-error . 에 문제가있는 경우 일반적으로이 오류가 발생합니다 SCRIPT_FILENAME.
white_gecko

답변:


18

다음 location과 유사하게 구성된 PHP 요청을 처리 하는 섹션 이 있어야합니다 .

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
    }

(추가 기능 은 임의의 파일을 PHP로 실행할 수 try_files있는 보안 취약점 을 해결합니다 .)

또한, 당신은 root에 정의되어야한다 server구성 파일의 섹션 하지location 섹션을 참조하십시오. 가장 일반적인 nginx 구성 오류 중 하나입니다 .


잘못된 구성 기사에 +1-특히 Nginx를 배우는 경우 읽을 가치가 있습니다. 몇 가지 훌륭한 팁과 함께 잘 쓰여진 엔트리 레벨!

2

승객 설치를위한 참고 사항입니다.

방금 여객을 통해 소스에서 nginx를 설치하여 php5-fpm에 문제가 발생했습니다. 기본 nginx.conf는 Michael Hampton이 설명한 문제를 이용합니다. 해결책은 루트 및 인덱스 지시문 주위의 결함을 제거하는 것입니다.

location / {
    root html
    index index.html index.htm
}

된다 :

root html
index index.html index.htm

또한 PHP 블록이 잘못 설정되었습니다. 올바른 방법은 Michael Hamptons의 답변을 참조하십시오.

php5-fpm이 소켓을 사용하도록 설정된 경우 nginx.conf의 php 블록에있는 fastcgi_pass 매개 변수가 /etc/php5/fpm/pool.d/www.conf의 소켓 설정을 가리 킵니다.


2

방금 nginx의 새 버전 에서이 문제가 발생했습니다. (이전 버전에서 가져온 구성)

내가해야 할 일은 다음과 include fastcgi_params;같이 내 관습 위에 배치 SCRIPT_FILENAME했습니다.

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

SCRIPT_FILENAME덮어 쓰는 것처럼 .


1

위치 블록에서 별칭을 사용하는 경우 처리되지 않은 404 오류도이 동작을 나타낼 수 있습니다. 브라우저에 표시되는 페이지가 더 형식이 지정된 (가운데있는) nginx 404 페이지가 아닌 단순한 텍스트 "파일을 찾을 수 없음"인 경우이를 확인할 수 있습니다. 본질적으로 404 페이지를 찾을 수 없다는 것을 의미합니다.

해결하려면 try_files $uri =404위치 블록에 추가 라인을 추가 하고 nginx 구성을 다시로드하십시오. Michael Hampton 이 특정 보안 취약점을 해결하는 것에 대해 말한 것 외에도 fastcgi 핸들러는 별칭 정의를 무시하고 기본 위치에서 404 스크립트를 찾을 수 있습니다.


1
sudo vim /etc/php-fpm.conf

149 행 정보, PHP 사용자 및 사용자 그룹 변경

나는 지금 그것을 성공적으로 테스트합니다.


이것은 옳습니다! 이봐, 당신은 그것을 시도 할 수 있습니다!
Love

사용자와 그룹을 변경할 때 php-fpm을 다시 시작하는 것을 잊지 마십시오. centos6을 사용하는 경우 다음 명령을 사용할 수 있습니다. sudo service php-fpm restart
Love

0

나는 보았다 :

업스트림에서 응답 헤더를 읽는 동안 FastCGI가 stderr로 전송 : "기본 스크립트를 알 수 없음"

스트레스 테스트를 할 때 높은 부하를받는 서버에서. 여전히 확인해야 할 의심은 OS에서 사용 가능한 파일 핸들이 모두 사용되었다는 것입니다. 이 경우 php-fpm은 파일에 대한 참조를 얻을 수 없습니다.

나는 이것이 투기 적이라는 것을 알고 있지만 그것은 확실히 내 시나리오에 적합하며 다른 사람을 도울 수도 있습니다.


0

@homeway에게 감사합니다. 당신의 대답은 저에게 영감을줍니다. 대단히 감사합니다!

나는 같은 질문을 만났지만 다른 방법은 질문을 해결하는 데 도움이되지 않았습니다!

: 내가 열쇠를 찾아이를 해결하는 것은 즉 리눅스 사용자에게 질문을 마우스 오른쪽 버튼으로 리드 : FastCGI를 표준 오류로 전송 : "주 스크립트 알 수없는"

PHP-FPM 기본 user : group은 apache : apache이므로 코드 디렉토리는 someBody : someBody입니다. 따라서 사용자 권한을 변경해야합니다!

이 질문을 해결하기 위해 블로그를 작성하면 다음 블로그를 볼 수 있습니다.

[Nginx FastCGI가 stderr로 전송 : "기본 스크립트를 알 수 없음"] [1]`[1] : http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.