使用Nginx + PHP访问被拒绝(403)PHP文件

我一直在这个问题上花费几个小时,尽管与此相关的帖子数量很高,但我无法解决。 我有一个Nginx + PHP-FPM的Fedora 20盒子,直到今天才工作得很好(在我重新加载php-fpm.service后,我猜)。 Nginx提供的静态文件没有问题,但任何PHP文件都会触发错误403。

权限没问题,nginx和php-fpm在用户“nginx”下运行:

root     13763  0.0  0.6 490428 24924 ?        Ss   15:47   0:00 php-fpm: master process (/etc/php-fpm.conf)
nginx    13764  0.0  0.1 490428  7296 ?        S    15:47   0:00 php-fpm: pool www
nginx    13765  0.0  0.1 490428  7296 ?        S    15:47   0:00 php-fpm: pool www
nginx    13766  0.0  0.1 490428  7296 ?        S    15:47   0:00 php-fpm: pool www
nginx    13767  0.0  0.1 490428  7296 ?        S    15:47   0:00 php-fpm: pool www
nginx    13768  0.0  0.1 490428  6848 ?        S    15:47   0:00 php-fpm: pool www

服务的文件已经被设置为nginx用户,我甚至结束了对这些文件的chmoding尝试,但仍然“拒绝访问”任何PHP文件。

以下是我的Nginx配置服务器:

server {
        listen          80;
        server_name     localhost;

        root            /var/www/html;

         location ~ .php$ {
            fastcgi_intercept_errors on;
            try_files $uri =404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}

PHP-FPM池:

[www]
...
listen = 127.0.0.1:9000
user = nginx
group = nginx
...

对于版本:

php-5.5.11 (当然还有php-fpm-5.5.11

nginx的-1.4.7

我正在添加Nginx错误日志:

 FastCGI sent in stderr: "Access to the script '/var/www/html' has been denied (see security.limit_extensions)" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "xxx.xxx.xxx.xxx"

并且准确地说security.limit_extensions是正确的,设置为: security.limit_extensions = .php

关于路径权限,可以遍历/ var / www / html 。 我错过了什么?


以下是一些可能的解决方案

  • 在你的php-fpm www.conf中设置security.limit_extensions.php.php5或其他任何适合你的环境的东西。 对于某些用户,完全删除所有值或将其设置为FALSE是实现它的唯一方法。

  • 在你的nginx配置文件中设置fastcgi_pass到你的套接字地址(例如unix:/var/run/php-fpm/php-fpm.sock; )而不是你的服务器地址和端口。

  • 检查您的SCRIPT_FILENAME fastcgi参数并根据文件的位置进行设置。

  • 在你的nginx配置文件中包含fastcgi_split_path_info ^(.+.php)(/.+)$; 在其中定义了所有其他fastcgi参数的位置块中。

  • 在你的php.ini中设置cgi.fix_pathinfo1


  • 请注意,上述解决方案(将cgi.fix_pathinfo设置为1 )是一个糟糕的主意。 请参阅https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/以获得良好的概述。

    这个问题很可能是依赖于PATH_INFO的应用程序。 为php启用访问日志记录以获取有关如何调用应用程序以帮助您调试此问题的更多信息。

    再一次,只要确定 - 接受的解决方案是一个可怕的想法,并可能会让你的网站被黑客入侵。


    不要忘记更改php.ini后重新启动php5-fpm服务!

    服务php5-fpm重新启动或服务php5-fpm重新加载

    fpm预启动php5,因此重启nginx以应用更改是不够的。

    链接地址: http://www.djcxy.com/p/32423.html

    上一篇: Access denied (403) for PHP files with Nginx + PHP

    下一篇: migrating from lighttpd to nginx