我有Nginx设置并正确显示测试页面。如果我尝试更改根路径,即使所有权限都相同,我也会收到403 Forbidden错误。此外,nginx用户存在。
nginx.conf:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
index index.html index.htm;
server {
listen 80;
server_name localhost;
root /var/www/html; #changed from the default /usr/share/nginx/html
}
}
namei -om /usr/share/nginx/html/index.html
f: /usr/share/nginx/html/index.html
dr-xr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxr-xr-x root root nginx
drwxr-xr-x root root html
-rw-r--r-- root root index.html
namei -om /var/www/html/index.html
f: /var/www/html/index.html
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxr-xr-x root root html
-rw-r--r-- root root index.html
错误日志
2014/03/23 12:45:08 [错误] 5490#0:* 13 open() " /var/www/html/index.html"失败(13:许可被拒绝),客户: XXX.XX.XXX.XXX,服务器:localhost,请求:" GET /index.html HTTP / 1.1",主机:" ec2-XXX-XX-XXX-XXX.compute-1 .amazonaws.com"
答案 0 :(得分:158)
我遇到了同样的问题,这是由于 SELinux 。
检查SELinux是否正在运行:
# getenforce
要在下次重启之前禁用SELinux:
# setenforce Permissive
重新启动Nginx并查看问题是否仍然存在。如果您想永久更改设置,可以修改/etc/sysconfig/selinux
如果SELinux是您的问题,您可以运行以下命令以允许nginx为您的www目录服务(确保在测试之前重新启用SELinux。即,# setenforce Enforcing
)
# chcon -Rt httpd_sys_content_t /path/to/www
如果您仍然遇到问题,请查看getsebool -a
中的布尔标记,特别是您可能需要打开httpd_can_network_connect
进行网络访问
# setsebool -P httpd_can_network_connect on
对我而言,只允许http提供我的www目录。
答案 1 :(得分:6)
我遇到了同样的问题。如果您正在使用Fedora / RedHat / CentOS,这可能会对您有所帮助:
setsebool -P httpd_read_user_content 1
希望这有帮助。
答案 2 :(得分:6)
First of all you have to run following command to allow nginx to access filesystem
sudo setsebool -P httpd_read_user_content 1
You can check if the files or directory with following command:
ls -Z
If it is still not accessible, you can try changing the SELinux property of the files and folder with following command:
chcon -Rt httpd_sys_content_t /path/to/www
However, above command cannot apply to files under FUSE or NFS system.
To enable serving files from FUSE mounts, you can use:
setsebool httpd_use_fusefs 1
To enable serving files from NFS mounts, you can use:
setsebool httpd_use_nfs 1
答案 3 :(得分:3)
这是Prowlas答案的补充,但我没有足够的声誉来提交: 如果/ path / to / www是用户的主目录。你应该试试:
setsebool -P httpd_enable_homedirs=1
这解决了我的问题
来源:http://forums.fedoraforum.org/archive/index.php/t-250779.html
答案 4 :(得分:2)
似乎合乎逻辑,所有文件都是root用户,尝试将其更改为nginx用户,只是想确保它不是首先被拒绝的列表权限。
sudo chown -R nginx:nginx /var/www/html
答案 5 :(得分:2)
拒绝访问有两种可能的原因:
DAC拒绝访问。仔细检查用户,组和文件权限。确保nginx进程在以其配置文件中指定的用户身份运行时,可以访问新的html根路径。
MAC拒绝访问。其中最广泛使用的是SELinux。要检查是否是引起问题的原因,您可以停止nginx进程并运行以下命令:
setenforce Permissive
然后再次启动nginx以查看是否授予访问权限。
或者,您可以检查文件上下文:
setenforce Enforcing
ls -Zd /usr/share/nginx/html /var/www/html
如果两个上下文不同,则可能需要更改新的html根路径的上下文:
chcon -R -t httpd_sys_content_t /var/www/html
重新启动nginx,看看它是否工作正常。如果是这样,您可以使更改永久生效:
semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
restorecon -Rv /var/www/html
其中一些命令需要以root用户身份运行。
答案 6 :(得分:1)
我正在使用:
sudo service nginx start
如果我使用:
sudo nginx
......一切正常。谁能解释这两者之间的区别呢?
答案 7 :(得分:1)
我遇到了同样的问题:
从命令行重新启动(我一直在使用Webmin)并注意到这个错误:
aed@aed:/var/www/test.local$ sudo service nginx restart
* Restarting nginx nginx
nginx: [warn] conflicting server name "test.local" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "test.local" on 0.0.0.0:80, ignored
显然存在重复定义,因此我尝试访问“test.local”失败。
答案 8 :(得分:1)
当我添加一个文件夹/home/new_user
的新用户作为新的虚拟主机时,我遇到了这个问题。确保这些文件夹(/home
,/home/new_user
,/home/new_user/xxx
...)为755
,以便解决我的问题。最后,根据/var/log/nginx/error.log
文件,我发现问题是正确的。
答案 9 :(得分:1)
请记住,您需要允许其他用户阅读整个路径。还记得Dropbox会将700设置为其根目录。所以chmod 755 ~/Dropbox
解决了我的问题。
答案 10 :(得分:1)
使用/ home / {user}目录服务其网站的人们需要在/ home / {user}目录中提供chmod 755访问权限,以使此工作有效。
此外,如果在服务器上启用了SELinux,请使用以下提到的命令:-
答案 11 :(得分:0)
在nginx上对我来说工作正常
semanage permissive -a httpd_t
答案 12 :(得分:0)
另一个可能的原因(这种情况下)是指向另一个目录的index.html文件的符号链接。
ls -lrt / usr / share / nginx / html /
rsync文件到该特定目录将轻松解决问题。
或禁用nginx.conf中的符号链接
http {
disable_symlinks off;
}
答案 13 :(得分:-1)
修改文件nginx.conf,将用户名更改为您的帐户名,然后重新启动nginx.it工作!
答案 14 :(得分:-7)
这解决了同样的问题:
重新启动Nginx并重试。如果失败,请再次检查日志。这对我有用