Skip to main content
 首页 » 编程设计

nginx之即使所有权限都设置正确,为什么 Nginx 仍返回 403

2024年06月20日44softidea

我已经设置了 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 [error] 5490#0: *13 open() "/var/www/html/index.html" failed (13: Permission denied), client: XXX.XX.XXX.XXX, server: localhost, request: "GET /index.html HTTP/1.1", host: "ec2-XXX-XX-XXX-XXX.compute-1.amazonaws.com"

请您参考如下方法:

我遇到了同样的问题,这是由于 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 中的 bool 标志,特别是您可能需要打开 httpd_can_network_connect用于网络访问

# setsebool -P httpd_can_network_connect on 

对我来说,允许 http 为我的 www 目录提供服务就足够了。