Nginx/PHP-FPM“拒绝访问。” 错误

Pet*_*hof 14 php nginx 12.04

我正在尝试设置新安装的 Ubuntu (12.04) 服务器,但无法通过 php-fpm 运行 PHP 文件。无论我做什么,我总是收到“拒绝访问”的消息。页面(纯文本,不是 html 或任何东西)。

安装的软件包:

nginx
nginx-common
nginx-full
php5
php5-cli
php5-common
php5-fpm
Run Code Online (Sandbox Code Playgroud)

配置详情:

PHP-FPM:

user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
Run Code Online (Sandbox Code Playgroud)

nginx:

user www-data;
worker_processes 3;
events { worker_connections 1024; }
Run Code Online (Sandbox Code Playgroud)

默认/测试域:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

/extra/htdocs/default/index.php:

<?php
phpinfo();
Run Code Online (Sandbox Code Playgroud)

其他一切都是默认的。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 "-" "-"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Pet*_*hof 34

终于修好了。

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

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;
Run Code Online (Sandbox Code Playgroud)

如果我评论这一行,一切正常。然而,我几乎在每一篇关于 Nginx 配置的文章中都看到了这一点,所以这让我很困扰。当我第一百万次查看我的配置时,我看到cgi.fix_pathinfo(in php.ini) 被设置为 0,它应该是 1。PHP 使用的默认值也是 1,所以我必须在我的调试时间更改它,因为我记得阅读过这个值,并认为它设置正确。

无论如何,也许它可以帮助任何在谷歌上搜索这个问题的人。

  • 感谢分享解决方案。建议[不要相信教程](https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/ ) 因为这些教程可能包含不安全的配置。不过,这些配置可能仍能正常工作。 (5认同)
  • `cgi.fix_pathinfo = 0` 被很多教程推荐,因为它有助于缓解漏洞,特别是通过任意文件执行 php 代码的漏洞。因此,如果您确实将其设置为 1 **确保您知道自己在做什么** 或指定其他缓解措施来弥补它。我发现这篇文章对这个问题有一个很好的解释:https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your -配置/ (2认同)