Ada*_*man 45 installation nginx http-status-code-403
我有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
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
错误日志
2014/03/23 12:45:08 [错误] 5490#0:*13打开()"/ 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"
Kur*_*urt 179
我遇到了同样的问题,这是由于SELinux.
要检查SELinux是否正在运行:
# getenforce
Run Code Online (Sandbox Code Playgroud)
要在下次重新启动之前禁用SELinux:
# setenforce Permissive
Run Code Online (Sandbox Code Playgroud)
重新启动Nginx并查看问题是否仍然存在.如果您想永久更改您可以编辑的设置/etc/sysconfig/selinux
如果SELinux是您的问题,您可以运行以下命令以允许nginx为您的www目录服务(确保在测试之前重新打开SELinux.即,# setenforce Enforcing)
# chcon -Rt httpd_sys_content_t /path/to/www
Run Code Online (Sandbox Code Playgroud)
如果您仍然遇到问题,请查看布尔标志getsebool -a,特别是您可能需要打开httpd_can_network_connect网络访问权限
# setsebool -P httpd_can_network_connect on
Run Code Online (Sandbox Code Playgroud)
对我来说,这足以让http服务我的www目录.
小智 6
我遇到了同样的问题.如果您使用的是Fedora/RedHat/CentOS,这可能对您有所帮助:
setsebool -P httpd_read_user_content 1希望这可以帮助.
首先,您必须运行以下命令以允许Nginx访问文件系统
sudo setsebool -P httpd_read_user_content 1
您可以使用以下命令检查文件或目录:
ls -Z
Run Code Online (Sandbox Code Playgroud)
如果仍然无法访问,则可以尝试使用以下命令更改文件和文件夹的SELinux属性:
chcon -Rt httpd_sys_content_t /path/to/www
Run Code Online (Sandbox Code Playgroud)
但是,以上命令不适用于FUSE或NFS系统下的文件。
要启用来自FUSE挂载的服务文件,您可以使用:
setsebool httpd_use_fusefs 1
Run Code Online (Sandbox Code Playgroud)
要从NFS挂载启用服务文件,可以使用:
setsebool httpd_use_nfs 1
Run Code Online (Sandbox Code Playgroud)
拒绝访问的可能原因有 2 个:
DAC拒绝访问。仔细检查用户、组和文件权限。确保 nginx 进程在以其配置文件中指定的用户身份运行时可以访问新的 html 根路径。
访问被MAC拒绝。其中使用最广泛的是 SELinux。要检查是否导致问题,您可以停止 nginx 进程并运行以下命令:
setenforce Permissive
Run Code Online (Sandbox Code Playgroud)
然后再次启动nginx,查看是否授予访问权限。
或者,您可以检查文件上下文:
setenforce Enforcing
ls -Zd /usr/share/nginx/html /var/www/html
Run Code Online (Sandbox Code Playgroud)
如果两个上下文不同,您可能需要更改新 html 根路径的上下文:
chcon -R -t httpd_sys_content_t /var/www/html
Run Code Online (Sandbox Code Playgroud)
重启nginx,看看是否正常。如果是这样,您可以使更改永久化:
semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
restorecon -Rv /var/www/html
Run Code Online (Sandbox Code Playgroud)
其中一些命令需要以 root 身份运行。
| 归档时间: |
|
| 查看次数: |
49791 次 |
| 最近记录: |