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

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

我正在尝试设置一个新安装的 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,以确保万无一失(当然,一旦它正常工作,我会将其调低)。所以这肯定不是权限问题
  • 这不是安全.限制_扩展我经常看到的问题:默认情况下,它被设置为 .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

答案1

终于修好了。

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

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

如果我注释掉这行,一切都会正常工作。但是,我几乎在每篇关于 Nginx 配置的文章中都看到了这一点,所以这让我很困扰。当我第 100 万次查看我的配置时,我看到cgi.fix_pathinfo(in php.ini) 设置为 0,而它应该是 1。PHP 使用的默认值也是 1,所以我一定是在调试时更改了它,因为我记得读过关于这个值的内容,并认为它设置正确。

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

答案2

在 Ubuntu 和 openSUSE 上,访问被拒绝错误也可能与 AppArmor 有关。您可以通过运行以下命令轻松检查:

sudo grep -i denied /var/log/audit/audit.log

如果您得到类似这样的信息,那就是 AppArmor:

type=AVC msg=audit(1678543274.258:837): apparmor="DENIED" operation="open" profile="php-fpm" name="/srv/www/htdocs/test.php" pid=31787 comm="php-fpm" requested_mask="r" denied_mask="r" fsuid=487 ouid=1000

相关内容