为什么Nginx返回403,即使所有权限都设置正确?
我已经安装了Nginx并正确显示了测试页面。如果我试图更改根路径,则会出现403禁止的错误,即使所有权限都相同。此外,还存在nginx用户 nginx.conf:为什么Nginx返回403,即使所有权限都设置正确?,nginx,installation,http-status-code-403,Nginx,Installation,Http Status Code 403,我已经安装了Nginx并正确显示了测试页面。如果我试图更改根路径,则会出现403禁止的错误,即使所有权限都相同。此外,还存在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.h
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
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
namei-om/var/www/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
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开放()
“/var/www/html/index.html”失败(13:权限被拒绝),客户端:
三十、 XXX.XXX,服务器:localhost,请求:“GET/index.html HTTP/1.1”,主机:“ec2 XXX XXX XXX XXX.compute-1.amazonaws.com”
看起来很合理,所有文件都是root用户,尝试将其更改为nginx用户,只是想确保它不是一个被拒绝的列表权限
sudo chown -R nginx:nginx /var/www/html
我使用的是:
sudo service nginx start
如果我使用:
sudo nginx
…一切正常。有人能解释这两者之间的区别吗?我遇到了同样的问题,这是由于SELinux造成的 要检查SELinux是否正在运行,请执行以下操作:
# getenforce
要在下次重新启动之前禁用SELinux,请执行以下操作:
# setenforce Permissive
重新启动Nginx,查看问题是否仍然存在。如果要永久更改设置,可以编辑/etc/sysconfig/selinux
如果SELinux是您的问题,您可以运行以下命令以允许nginx为您的www目录提供服务(确保在测试之前重新打开SELinux。即,#setenforce
)
如果您仍然存在问题,请查看getsebool-a
中的布尔标志,尤其是您可能需要打开httpd\u can\u network\u connect
进行网络访问
# setsebool -P httpd_can_network_connect on
对我来说,允许http为我的www目录提供服务就足够了。这是对Prowlas答案的补充,但我没有足够的声誉来宣传: 如果/path/to/www是用户的主目录。你应该试试:
setsebool -P httpd_enable_homedirs=1
这解决了我的问题
来源:我遇到了同样的问题:
- 已选中nginx.conf以验证用户
- 权限设置正确
- 确保为整个路径设置了“x”
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”失败。这解决了相同的问题:
重新启动Nginx并重试。如果失败,请再次检查日志。这对我很有效我遇到了同样的问题。如果您正在使用Fedora/RedHat/CentOS,这可能会帮助您:
- 根据SELinux:
setsebool-P httpd\u read\u user\u content 1
希望这能有所帮助。我在添加一个新用户时遇到了这个问题,该用户的文件夹为
/home/new\u user
。确保这些文件夹(/home
,/home/new\u user
,/home/new\u user/xxx
…)是755
,以便解决我的问题。最后,根据/var/log/nginx/error.log
文件,我发现我的问题是正确的。请记住,您需要允许其他用户读取整个路径。还要记住,Dropbox将把700设置为其根目录。因此chmod755~/Dropbox
解决了我的问题。修改文件nginx.conf,将用户名更改为您的帐户名,然后重新启动nginx.it 拒绝访问可能有两个原因:
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用户运行首先,您必须运行以下命令以允许nginx访问文件系统
sudo setsebool-p httpd\u read\u user\u content 1
您可以使用以下命令检查文件或目录是否正确:
ls -Z
chcon -Rt httpd_sys_content_t /path/to/www
如果仍然无法访问,可以尝试使用以下命令更改文件和文件夹的SELinux属性:
ls -Z
chcon -Rt httpd_sys_content_t /path/to/www
但是,上述命令不能应用于FUSE或NFS系统下的文件
要启用从保险丝安装服务文件,可以使用:
setsebool httpd_use_fusefs 1
setsebool httpd_use_nfs 1
要启用从NFS装载服务文件,可以使用:
setsebool httpd_use_fusefs 1
setsebool httpd_use_nfs 1
在nginx上为我工作很好
semanage permissive -a httpd_t
另一个可能的原因(本例中不是)是index.html文件的符号链接指向另一个目录
ls-lrt/usr/share/nginx/html/
将rsync文件发送到该特定目录将很容易解决此问题
或禁用nginx.conf中的符号链接
http {
disable_symlinks off;
}
使用/home/{user}目录为其网站提供服务的用户需要在其/home/{user}目录上提供chmod 755访问权限,以实现此功能 此外,如果服务器上启用了SELinux,请使用以下命令:-
tail
日志文件/var/log/nginx/error.log
并告诉我您看到了什么错误?添加了错误日志-抱歉,原来忘记添加错误-这是每个请求的唯一条目。(我用Xs重新调整了IP的速度。似乎是预期的错误,不是吗?@Adam-restorecon-r/var/www/
将在/var/www/
和下面还原SELinux上下文。如果您从外部/var/www
到内部/var/www
执行mv
或cp
,请尝试执行restorecon
。我相信这是因为原始的SELinux上下文将遵循文档。库尔特或特里的回答像