Nginx stat() 失败 (13: 权限被拒绝)

4

好的,这里有一些之前的帖子,但没有解决我的问题。

我有一个只是基本HTML、CSS和JS的网站配置,现在想要添加一个WordPress网站。我的WordPress网站配置如下:

#######################

server {
listen 80;

root /usr/share/nginx/threadtheatre/wordpress;
index index.php;
server_name threadtheatre.co.uk;

access_log   /var/log/nginx/thread.access.log;
    error_log    /var/log/nginx/thread.error.log;

location / {

            # try_files $uri $uri/ =404;
            try_files $uri $uri/ /index.php?q=$uri&$args;
}
    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
            root /usr/share/nginx/html;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

}

这是我日志中的错误信息

"/usr/share/nginx/threadtheatre/wordpress/index.php" failed (13: Permission denied), client: 109.155.53.189, server: threadtheatre.co.uk, request: "GET / HTTP/1.1", host: "threadtheatre.co.uk"

nginx正在使用nginx用户,php-fpm同理。nginx目录及其所有子目录的权限如下。

drwxrwxr-x.  3 root nginx  4096 Feb  8 18:23 ..

如果我在网页上浏览threadtheatre.co.uk,会出现404错误。
希望有人能够帮忙解决。
李。

正在使用哪个操作系统? - givanse
3个回答

11

您还存在这个问题吗?这个解释对我有用:

https://serverfault.com/a/170263/140684

基本上,nginx需要在路径中的每个目录上拥有执行权限才能访问您的应用程序。希望这可以帮助您。


这对我也起作用了。反直觉(我认为只有读取权限就足够了,但是nginx需要目录的+x)。 - Dan Dascalescu
3
这并不是特定于nginx的问题,而是通用的Linux事物(甚至适用于Unix,不太确定)。 目录权限的行为与文件略有不同。目录的“x”位被称为搜索位,需要才能进入该目录并访问其中的文件和子目录。您可以自己尝试创建一个目录,删除“x”位(chmod a-x <dir>),然后尝试cd进入它。 - Plenka
1
这就是答案...nginx需要在到达您的应用程序路径的每个目录上具有执行权限...非常奇怪。 - Kermit_ice_tea

8

对于我来说,这是因为启用了SELinux,请使用以下命令进行检查:

selinuxenabled && echo enabled || echo disabled

如果已启用,请尝试禁用

nano /etc/sysconfig/selinux
SELINUX=disabled

那么

reboot

-1
如果在 Fedora 或者 RedHat 上托管了 nginx,需要更改 SELinux 策略并允许 nginx 从路径 /home/path/site 提供服务。
chcon -R -t httpd_sys_content_t /home/path/site

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接