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

Answers:


33

终于解决了。

罪魁祸首是我的配置中的这一行:

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

如果我对此行发表评论,一切都会很好。但是我几乎在每一篇有关Nginx配置的文章中都看到了这一点,这让我很烦。第百万次查看配置时,我发现cgi.fix_pathinfo(中的php.ini)设置为0,应为1。PHP使用的默认值也为1,所以我必须在调试时间内更改此设置,因为我记得阅读有关此值的内容,并认为它设置正确。

无论如何,也许它可以帮助任何使用Google搜索此问题的人。


5
感谢您分享解决方案。建议不要信任这些教程,因为这些教程可能包含不安全的配置。但是,那些配置仍然可以正常工作。
Pothi Kalimuthu 2012年

感谢您提供的链接,我遇到了几次,并应用了这些说明。错误可能是我在调试时遇到的错误(x个小时后,您开始失去对某些已更改内容的跟踪)。
Peter Kruithof

我的是一个chown问题。
尔根·保罗

非常感谢。这个问题已经解决了几个小时,并且cgi.fix_pathinfo设置为0(默认配置)才是问题所在。
Mauvis Ledford 2014年

2
cgi.fix_pathinfo = 0许多教程都推荐使用该工具,因为它有助于缓解漏洞,尤其是通过任意文件执行php代码的漏洞。因此,如果您将此设置为1,请确保您知道自己在做什么,或者指定其他缓解措施来弥补这一问题。我发现此帖子对此问题有很好的解释:nealpoole.com/blog/2011/04/…–
MikeD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.