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

194

我在使用默认配置的同时,在我的ubuntu 12.04机器上安装了nginx,并添加了特定目录。

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                root /username/test/static;
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
...

...
}

我只想要一个简单的静态nginx服务器,用于从那个目录中提供文件服务。但是,通过检查error.log,我发现

2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "domain"
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html

我已经在/username/test/static上执行了chown -R www-data:www-data,并将其设置为chmod 755。我不知道还需要设置什么。


6
请检查 www-data 用户是否可以进入 /username/test/static 目录:sudo -u www-data cd /username/test/static - Maciej Sz
我得到了“权限被拒绝”的错误,但是当我执行ls -l命令时,它显示设置为www-data用户。 - user299709
2
可能是/username在encryptfs上吗?我在/home/username文件夹中遇到了完全相同的问题,我的网站就在那里。如果我将其移出encryptfs,则一切正常。 对我来说仍然没有解决方案... - Georgi
17个回答

3
将你的 nginx.conf 文件中的 user 属性更改为 www-static 文件所有者。
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user your_user_name;

# same other config

2
在我的情况下,提供文件的文件夹是一个符号链接到另一个文件夹的。这是使用以下方式创建的:
ln -sf /origin /var/www/destination

尽管目标文件夹(符号链接)的权限(用户和组)正确,但我仍然遇到了错误,因为Nginx需要对原始文件夹的整个层次结构具有权限。

2

默认情况下,当您安装nginx时,静态数据将位于/var/www/html目录中。因此,您只需将静态文件夹复制到/var/html/目录中并设置

root /var/www/<your static folder>

在nginx.conf文件中(或/etc/nginx/sites-available/default文件中)

这对我在ubuntu上有效,但我想其他发行版应该差别不大。

希望能帮到你。


0

我遇到了同样的问题,我正在使用Centos7上的Plesk Onyx 17。我可以在受影响域的日志下的proxy_error_log中看到此错误。 /var/www/vhosts/中的所有目录/文件都归各自的用户(域所有者)所有,并且您可以看到它们全部都在psacln组中。因此解决方案是将nginx也添加到此组中,以便他可以看到他所需的内容:

usermod -aG psacln nginx

确实,重新启动nginx并使用Ctrl+F5重新加载页面。


0
我找到了一个解决方法: 将文件夹移动到nginx配置文件夹中,例如 "/etc/nginx/my-web-app"。 然后更改权限为root用户 "sudo chown -R root:root "my-web-app"。

0

这通常是权限问题... 对我来说,因为我使用/root/**作为nginx的根目录,它需要更高的权限。一个简单的方法就是将项目移动到您自己创建的目录中。


-4

您还可以添加哪个用户将运行nginx。在nginx.conf文件中,进行以下更改:

user root;

您可以将以上行添加为nginx配置文件的第一行。 您可以编写任何具有在该目录中写入权限的用户的名称。


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