NGINX가 PHP 파일을 실행하지 않습니다


9

이에 대한 답변을 찾을 수 없습니다. PHP5 + NGINX + PHP-FPM을 설치했는데 PHP 파일을 실행할 수 없습니다. "죄송합니다!이 링크가 깨졌습니다." CHROME에 오류가 있습니다. 가치있는 오류 로그 보고서가 없습니다. 루트에 index.php가 있고 사용자 정의 phpinfo.php 파일을 만들려고 시도했지만 모두 작동하지 않았습니다.

HTML 파일을로드 할 수 있지만 PHP는로드 할 수 없습니다.

NGINX의 로컬 사이트 구성은 다음과 같습니다.

server {
    listen       80;
    server_name  im;
    access_log /var/www/website/access.log;
    error_log /var/www/website/error.log;

    location / {
        root   /var/www/website;
        index  index.html index.htm index.php;
    }


    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/website$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

}

모든 디렉토리의 소유권을 www-data : www-data로 변경하고 PHP 파일에 777을 만들었습니다. nginx, FPM 등을 다시 시작하지 않았습니다.

도움? :(


오류 로그를 살펴보십시오
— Mike

"귀중한 오류 로그 보고서가 없습니다." 완전히 비어 있습니다.
— Gabriel A. Zorrilla

문제를 진단하려면 더 많은 데이터가 필요합니다. 'fastcgi_intercept_errors on'을 추가하여 시작하는 것이 좋습니다. FPM 오류를 기록하려면 구성 (fastcgi_params에없는 경우)에. 또한 error_log 줄에 'debug'를 추가하면 훨씬 더 자세한 내용을 볼 수 있습니다 (/ n / x에서 main nginx error_log를 확인하십시오). server_name 지시문은 비정상적으로 보입니다.이 게시물로 대체했는지 또는 실제로는 그렇지 않은지 확실하지 않습니다. 일반적인 권장 사항으로 루트 지시문을 위치 블록 밖으로 옮기십시오. (최종 (아마도) 제안 : 기본 서버가 볼 수있는 html 페이지를 제공하지 않는지 확인하십시오).
— cyberx86

답변:


9

"죄송합니다!이 링크가 끊어진 것 같습니다." CHROME에 오류가 있습니다.

오류 페이지가 512 바이트 미만인 경우 Chrome에 자체 오류 페이지가 표시됩니다.

다음 줄이 있다고 생각합니다 fastcgi_params.

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

그렇다면 root지시어가 정의되어 있기 때문에에 location /적용되지 location ~ \.php$않으므로 SCRIPT_FILENAMEURI가됩니다.

root지시문을 server레벨 컨텍스트 로 이동하여 해결할 수 있습니다 .

server {
    listen       80;
    server_name  im;
    access_log /var/www/website/access.log;
    error_log /var/www/website/error.log;

    root   /var/www/website;

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

}

빙고. 제안대로 서버 블록을 루트로 이동하고 작동했습니다. 감사!
— Gabriel A. Zorrilla

@ Quanta : OP는 그의 질문에서 구성을 편집 했습니까? 하드 코딩 된 경로이기 때문에 루트 컨텍스트가 위치 컨텍스트에 정의되어 있으면 여전히 완벽하게 작동합니다. 작동하지 않는 유일한 경우는 $ document_root를 사용하여 fastcgi_params 파일에서 SCRIPT_FILENAME을 정의하여 하드 코딩 된 것을 재정의하는 경우였습니다.
— Martin Fjordvald

@MartinF : 아니요. OP는 구성을 편집하지 않았습니다. 네가 옳아. 답변을 편집하겠습니다.
— quanta

-3

내 경우에는 php-zip 패키지가 누락되었습니다. 이 문제를 해결하기 위해 다음을 실행했습니다.

yum install -y php-zip
systemctl restart php-fpm nginx

3
분명히 OP의 원인은 전적으로 다른 것이 었습니다.
— Sven

그렇다고이 문제로이 페이지를 찾은 사람이 OP와 동일한 원인을 갖게되는 것은 아니며, wejdross가 한 원인이 있고이 답변이 유용하다는 것을 알 수 있습니다. 문제는 그 원인에 국한된 것이 아니라 그 증상에 특정한 것, 그리고 그 원인에 대한 여러 가지 원인이 있기 때문에 다른 원인을 가진 사람들이 여기에 올 수 있습니다.
— Synetech

-4
    fastcgi_pass unix:/var/run/php5-fpm.sock;

4
서버 결함에 오신 것을 환영합니다! 여기에 좋은 답변을 제공 할 지식이있는 것 같지만 좋은 답변을 작성하려면 어떻게합니까?를 읽어보십시오 . 도움말 센터에서 답변을 수정하고 확장하십시오. 귀하의 명령 / 코드 / 설정은 기술적으로 해결책 일 수 있지만 일부 설명은 환영합니다. 미리 감사드립니다.
— HBruijn

4
또한 : 그 한 줄이 문제를 해결하는 것이더라도 어디로 가나 요? OP는 2를 표시 locations합니다. 줄이 하나로 들어 갑니까? 다른 사람? 양자 모두? 답변을 수정하여 완성하십시오.
— David Makogon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.