我在使用安装在我的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
。我不知道还需要设置什么。
答案 0 :(得分:152)
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
答案 1 :(得分:73)
我在CentOS 7机箱上遇到了同样的问题。
似乎我打了selinux。将selinux置于许可模式(setenforce permissive
)已经解决了这个问题。我会试着找回一个正确的解决方案。
答案 2 :(得分:30)
在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服务器时,或者他们称之为 Droplets 时,我所学到的只是一个侧面说明。使用SELinux需要相当数量的RAM。它很可能就像你在一个内存小于2GB的小滴上运行并管理 SELinux一样。
答案 3 :(得分:30)
Nginx需要在通往站点根目录的所有目录上拥有+ x访问权限。
确保在通往站点根目录的路径中的所有目录上都有+ x。例如,如果站点根目录是/ home / username / siteroot:
{% set myVar = false %}
{% if myVar is defined and not myVar %}
stuff
{% endif %}
答案 4 :(得分:18)
您可能正在运行安全增强型Linux,因此请为此添加规则。 我有权限13个错误,即使设置了权限并且用户存在..
chcon -Rt httpd_sys_content_t /username/test/static
答案 5 :(得分:3)
症状:
无法将图像上传到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
答案 6 :(得分:2)
默认情况下,安装nginx时的静态数据将位于/ var / www / html中。 因此,您只需将静态文件夹复制到/ var / html /并设置
即可root /var/www/<your static folder>
在ngix.conf中(或/ etc / nginx / sites-available / default)
这对我在ubuntu上有用,但我想对其他发行版来说应该没什么不同。
希望它有所帮助。
答案 7 :(得分:2)
我终于找到了解决方法。简而言之,假设您的用户名是joe
,并且您在个人文件系统/home/joe/path/to/website
下拥有一个网站。
您实际上必须告诉系统nginx
是您的好朋友。
将nginx
放在joe
组中:
sudo gpasswd -a nginx joe
在那之后,如果仍然不起作用,请检查对/home/joe
目录的正确访问。这可能就是nginx无法访问文件的原因,因为即使他现在是您的朋友,您也必须打开他的房门:
sudo chmod g+x /home/joe
就是这样。实际上,这就是使Nginx可以访问本地文件的所有操作:)
我认为此方法没有安全性问题,因为nginx
是最高权限,只有管理员才能更改组。 nginx
现在可以读取joe
目录中的内容。如果nginx
帐户的持有人与您打开目录访问的用户不同,那么这仅是安全漏洞,但是在我的情况下,我是双方的持有人,这都是在本地环境中。
答案 8 :(得分:1)
就我而言,提供文件的文件夹是指向另一个文件夹的符号链接,用
制作ln -sf /origin /var/www/destination
即使目标文件夹(符号链接)上的权限(用户和组)正确,我仍然有错误,因为Nginx也需要拥有原始文件夹整个层次结构的权限。
答案 9 :(得分:0)
我有同样的问题,我正在使用Plesk Onyx 17和Centos7。我可以在受影响的域日志下的proxy_error_log中看到此错误。 / var / www / vhosts /中的所有dirs /文件都归各自的用户(域所有者)所有,您可以看到它们都在psacln组中。因此,解决方案是将nginx添加到该组中,以便他可以看到他需要的内容:
usermod -aG psacln nginx
确实,重启nginx并使用Ctrl + F5重新加载页面。
答案 10 :(得分:0)
我遇到了这个问题,我解决了它给nginx用户的权限,并将这样的内容分组:
with_rows
答案 11 :(得分:0)
我找到了一个解决方法: 将文件夹移动到nginx配置文件夹,在我的情况下&#34; / etc / nginx / my-web-app&#34;。 然后将权限更改为root用户&#34; sudo chown -R root:root&#34; my-web-app&#34;。
答案 12 :(得分:0)
将您的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
答案 13 :(得分:0)
您还可以添加哪个用户将运行nginx。在nginx.conf文件中,进行以下更改:
user root;
您可以将以上行添加为nginx conf中的第一行。 您可以输入有权在该目录中写入的任何用户的名称。
答案 14 :(得分:0)
这通常是特权问题...对我来说,这是因为我使用/ root / **作为nginx根目录,因此需要更高的特权。一种简单的方法是将项目移到您自己创建的目录中。
答案 15 :(得分:0)
这就是我修复此问题的方式
sudo chmod o+x /home/ec2-user