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.