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

我正在使用默认configuration,同时在我的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 

我已经做chown -R www-data:www-data /username/test/static ,我已经将它们设置为chmod 755 。 我不知道还有什么需要设置的。

Nginx在目录下运行,所以如果你不能从nginx用户cd到那个目录,那么它将会失败(就像日志里的stat命令一样)。 确保www-user可以一路cd/username/test/static 。 您可以确认stat失败或运行成功

 sudo -u www-data stat /username/test/static 

在你的情况下, /username目录可能是这里的问题。 通常www-data没有权限cd到其他用户主目录。

在这种情况下最好的解决scheme是将www-data添加到username组:

 gpasswd -a www-data username 

并确保username组可以input沿path的所有目录:

 chmod g+x /username && chmod g+x /username/test && chmod g+x /username/test/static 

为了您的更改工作,请重新启动nginx

 nginx -s reload 

我在CentOS 7盒子上遇到同样的问题。

似乎我会打selinux。 把selinux放到宽松模式( setenforce permissive )已经解决了这个问题。 我会尽量找回适当的修复。

在CentOS 7.0上,我遇到了由SELinux引起的Access Deined问题,这些步骤解决了这个问题:

 yum install -y policycoreutils-devel grep nginx /var/log/audit/audit.log | audit2allow -M nginx semodule -i nginx.pp 

更新:只是从使用digitalocean的虚拟Linux服务器时所学到的一个侧面说明,或者他们称之为Droplet 。 使用SELinux需要大量的RAM。 这很可能就像无法运行和pipe理小于2GB的RAM的SELinux一样。

您可能正在运行安全增强型Linux,因此请为此添加规则。 我有权限13错误,即使权限设置和用户存在..

chcon -Rt httpd_sys_content_t /username/test/static

Nginx需要在通往该站点根目录的所有目录上具有+ x访问权限。

确保在通往站点根目录的path中的所有目录上都有+ x。 例如,如果网站的根目录是/ home / username / siteroot:

 chmod +x /home/ chmod +x /home/username chmod +x /home/username/siteroot 

症状:

无法将图片上传到WordPress媒体库。

原因:

(CentOS) yum update

错误:

 2014/10/22 18:08:50 [crit] 23286#0: *5332 open() "/var/lib/nginx/tmp/client_body/0000000003" failed (13: Permission denied), client: 1.2.3.4, server: _, request: "POST /wp-admin/media-new.php HTTP/1.1", host: "example.com", referrer: "http://example/wp-admin/media-new.php" 

解:

chown -R www-data:www-data /var/lib/nginx

默认情况下,当您安装nginx时,静态数据将位于/ var / www / html中。 所以你可以将你的静态文件夹复制到/ var / html /中并设置

 root /var/www/<your static folder> 

在ngix.conf(或/ etc / nginx / sites-available / default)

这在Ubuntu的工作对我来说,但我想它应该没有太大的不同,其他发行版。

希望能帮助到你。

我有同样的问题,我使用Plesk Onyx 17与Centos7。 我可以在受影响的域日志下的proxy_error_log中看到这个错误。 / var / www / vhosts /中的所有目录/文件都由相应的用户(域所有者)拥有,您可以看到它们全部位于psacln组中。 所以解决办法是把nginx也加到这个组中,这样他就可以看到他需要的东西了:

 usermod -aG psacln nginx 

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

我遇到了这个问题,我解决它给nginx用户和组的权限这样的事情:

 chown -R nginx:nginx /username/test/static 

在我的情况下,文件的文件夹是一个符号链接到另一个文件夹,用

 ln -sf /origin /var/www/destination 

即使权限(用户和组)在目标文件夹(符号链接)上正确,我仍然有错误,因为Nginx需要对原始文件夹整个层次结构的权限。