问题描述
我在使用安装在我的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
。我不知道还需要设置什么。
最佳解决方案
Nginx在目录中运行,因此如果你不能从nginx用户那个cd
到那个目录那么它将失败(就像你的日志中的stat
命令一样)。确保www-user
可以cd
一直到/username/test/static
。您可以通过运行确认stat
将失败或成功
sudo -u www-data stat /username/test/static
在您的情况下,可能/username
目录是此处的问题。通常,www-data
无权将cd
授予其他用户主目录。
在这种情况下,最好的解决方案是将www-data
添加到username
组:
gpasswd -a www-data username
并确保username
组可以进入路径中的所有目录:
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
)已经解决了这个问题。我会试着找回适当的修复方法。
第三种解决方案
Nginx需要在通往站点根目录的所有目录上具有+ x访问权限。
确保在通向站点根目录的路径中的所有目录上都有+ x。例如,如果站点根目录是/home /username /siteroot:
chmod +x /home/
chmod +x /home/username
chmod +x /home/username/siteroot
第四种方案
在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时,我所学到的只是一个side-note。使用SELinux需要相当数量的RAM。最有可能的是,您将无法在RAM少于2GB的Droplet上运行和管理SELinux。
第五种方案
您可能正在运行Security-Enhanced Linux,因此请为此添加规则。即使设置了权限并且用户存在,我也有13个错误的权限。
chcon -Rt httpd_sys_content_t /username/test/static
第六种方案
症状:
无法将图像上传到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 /默认)
这对我来说对ubuntu很有用,但我想对其他发行版来说应该没什么不同。
希望能帮助到你。