Centos 7 上使用 nginx 访问 PHP 文件权限被拒绝

Centos 7 上使用 nginx 访问 PHP 文件权限被拒绝

我有问题

我做了什么

Install Centos 7.2 with nginx 1.10
-- create a nginx server block sudo mkdir -p /var/www/example.com/html
-- set permission sudo chown -R nginx:nginx /var/www/example.com/html
--sudo chmod -R 755 /var/www
set setenforce 0
Install PHP7 and PHP-FPM
--change cgi.fix_pathinfo=1 to cgi.fix_pathinfo=0
-- and change in www.conf like 
    listen = /var/run/php-fpm/php-fpm.sock
    listen.owner = nginx 
    listen.group = nginx
    user = nginx 
    group = nginx

因此,如果我在 /var/www/example.com/html 中创建一个带有标准 hello 的 index.html 文件,然后在浏览器中打开它,我现在就可以看到它,如果我对 php 文件执行同样的操作,但是我会收到 404 错误

我知道你想看 nginx example.com.conf 文件:

server {
listen 80;
server_name example.com www.example.com;

location / {
    root /var/www/example.com/html;
    index index.php index.html index.htm;
    try_files $uri $uri/ =404;
}
 ....
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

}

我没有忘记重启 nginx 和 php-fpm。另外,也没有忘记检查 /var/www/example.com/html 和所有父级文件夹的权限

请不要因为不清楚或可能重复而搁置,并阅读更多

我的问题是什么

我的问题是我无法打开 .php 文件

但我注意到如果我跑

ps aux | grep -i php70w-fpm
gamba* 11458 0.0 0.0 112648 1004 pts/0 S+ 16:11 0:00 grep --color=auto -i php70w-fpm

*gamba 是管理员用户(具有 root 权限,可以使用 sudo 操作)。但上面几行你可以看到我的 www.conf 文件是这样的

如果我跑

top

我明白了

11288 gamba 20 0 140904 2404 1148 S 0.0 0.0 0:01.00 sshd
11331 root 20 0 47788 1204 232 S 0.0 0.0 0:00.00 nginx
11332 nginx 20 0 48304 2220 828 S 0.0 0.0 0:00.01 nginx
12660 root 20 0 405024 13580 7532 S 0.0 0.1 0:00.03 php-fpm
12662 nginx 20 0 405024 7060 1004 S 0.0 0.0 0:00.00 php-fpm
12663 nginx 20 0 405024 7056 1004 S 0.0 0.0 0:00.00 php-fpm
12664 nginx 20 0 405024 7056 1004 S 0.0 0.0 0:00.00 php-fpm
12665 nginx 20 0 405024 7056 1004 S 0.0 0.0 0:00.00 php-fpm
12666 nginx 20 0 405024 7056 1004 S 0.0 0.0 0:00.00 php-fpm
12679 gamba 20 0 157828 2456 1560 R 0.0 0.0 0:02.05 top

所以我的问题是我无法运行 .php 文件,我不知道现在我必须做什么才能完成我已经完成的工作并检查日志等等

更新

我忘了给 nginx 提供日志

 2016/07/21 15:22:37 [error] 11332#11332: *5 "/var/www/example.com/html/index.php" is forbidden (13: Permission denied), client: XX.XXX.XXX.XXX, server: example.com, request: "GET / HTTP/1.1", host: "example.com"

我已经更新了 nginx 日志,这是一个旧错误

答案1

检查以确保你的 php 配置没有任何语法错误或权限问题 - 我不熟悉 Centos7,但在 Ubuntu 14.04 中sudo /usr/sbin/php-fpm7.0 --fpm-config /etc/php/7.0/fpm/php-fpm.conf

它会告诉您是否有任何错误。我以前遇到过这个问题,这是因为 PHP-FPM 尝试写入 PID 文件的目录不存在。

答案2

您能否发布 /etc/nginx/nginx.conf 文件中的前几行?它们应该指定 nginx 线程以哪个用户身份运行。通常(至少在 debian 上)是:

user www-data;

或者

user nginx;

该用户或该用户所在的组需要对 /var/www/html/mysite 文件夹具有权限。

如果您能发布以下结果也会很有帮助:

sudo nginx -t

答案3

如果用户和文件夹权限没有问题,则检查 SElinux 是否被禁用。

相关内容