Nginx / PHP-FPM“액세스 거부”오류


14

새로 설치된 Ubuntu (12.04) 서버를 설정하려고하는데 php-fpm을 통해 PHP 파일을 실행할 수 없습니다. 내가 무엇을하든 항상 액세스가 거부되었습니다. 페이지 (html 또는 기타 텍스트가 아닌 일반 텍스트).

설치된 패키지 :

nginx
nginx-common
nginx-full
php5
php5-cli
php5-common
php5-fpm

구성 세부 사항 :

PHP-FPM :

user = www-data
group = www-data
listen = /var/run/php5-fpm.sock

Nginx :

user www-data;
worker_processes 3;
events { worker_connections 1024; }

기본 / 테스트 도메인 :

server {
    listen       80;
    server_name  localhost;
    root         /extra/htdocs/default;
    index        index.html index.php

    access_log   /extra/logs/default/access.log;
    error_log    /extra/logs/default/error.log;

    location / {
        try_files  $uri $uri/ /index.html;
    }

    location ~ \.php
    {
        fastcgi_split_path_info  ^(.+\.php)(/.+)$;

        include fastcgi_params;

        fastcgi_index   index.php;
        fastcgi_pass    unix:/var/run/php5-fpm.sock;
        fastcgi_param   PATH_INFO         $fastcgi_path_info;
        fastcgi_param   PATH_TRANSLATED   $document_root$fastcgi_path_info;
        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    }
}

/extra/htdocs/default/index.php :

<?php
phpinfo();

다른 모든 것이 기본값입니다. Nginx 및 php-fpm 로그 모두 오류가 표시되지 않습니다. 그러나로드 http://<server-ip>/index.php하면 "액세스 거부"페이지가 나타납니다.

문제 해결:

  • index.html 파일은 정상적으로 작동합니다. 따라서 php-fpm이거나 Nginx와 php-fpm 사이의 fastcgi 바인딩이어야합니다.
  • 전체 /extra디렉토리 의 소유권 (사용자 및 그룹 모두)을 으로 www-data, 소유권을 777로 설정했습니다 (물론 작동하면 톤 다운합니다). 따라서 권한 문제가 아닙니다.
  • 내가 많이 본 것은 security.limit_extensions 문제가 아닙니다 . 기본적으로 .php로 설정되어 있습니다. .php .html동일한 결과 로 명시 적으로로 설정했습니다 .

나는 정말로 이것에 질려서, 이미 OSX 머신에서이 설정을 두 번 설치했고 모든 것이 완벽하게 작동했습니다. 내가 간과하는 것이 있습니까?

로그 내용 :

Nginx 오류 로그가 비어 있습니다.

Nginx 액세스 로그 (제거 된 IP) :

<ip> - - [17/Jul/2012:11:21:25 +0200] "GET /favicon.ico HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:28 +0200] "GET /index.php HTTP/1.1" 403 46 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:34 +0200] "-" 400 0 "-" "-"

php-fpm 로그 :

[17-Jul-2012 10:44:14] NOTICE: fpm is running, pid 4969
[17-Jul-2012 10:44:14] NOTICE: ready to handle connections

답변:


33

마침내 그것을 고쳤다.

범인은 내 설정 에서이 줄이었습니다.

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

이 줄에 주석을 달면 모든 것이 잘 작동했습니다. 그러나 나는 Nginx 설정에 대해 읽은 거의 모든 게시물에서 이것을 보았으므로 나를 귀찮게했습니다. 백만 번째 시간 동안 내 설정을 볼 때 cgi.fix_pathinfo(in php.ini)이 0으로 설정 되어 있음을 알았 습니다 .PHP가 사용하는 기본값은 1이기도합니다. 따라서 디버깅 시간에 이것을 변경해야합니다. 이 값을 읽은 것을 기억하고 올바르게 설정되었다고 생각하십시오.

어쨌든,이 문제에 대한 모든 인터넷 검색에 도움이 될 수 있습니다.


5
솔루션을 공유해 주셔서 감사합니다. 해당 자습서에는 보안되지 않은 구성이 포함될 수 있으므로 자습서를 신뢰하지 않는 것이 좋습니다 . 그러나 이러한 구성은 여전히 ​​올바르게 작동 할 수 있습니다.
Pothi Kalimuthu

링크 주셔서 감사합니다, 나는 그것을 두 번 발견하고 그 지침을 적용했습니다. 실수는 아마도 디버깅 분노에서 내 자신의 것일 수도 있습니다 (x 시간 후에 변경 한 것들을 잃기 시작합니다).
Peter Kruithof

chown문제였다.
Jürgen Paul

정말 고맙습니다. 몇 시간 동안이 문제를 해결 cgi.fix_pathinfo하고 0 (기본 구성)으로 설정 한 것이 문제였습니다.
Mauvis Ledford

2
cgi.fix_pathinfo = 0취약점, 특히 임의의 파일을 통해 PHP 코드를 실행하는 취약점을 완화하는 데 도움이되므로 많은 자습서에서 권장됩니다. 따라서이 값을 1로 설정하면 수행중인 작업 을 확인 하거나 다른 완화 방법을 지정하여 보완하십시오. : 나는이 문제에 대한 좋은 설명이이 게시물을 발견 nealpoole.com/blog/2011/04/...
마이킹
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.