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需要对原始文件夹整个层次结构的权限。