当前位置:  开发笔记 > 后端 > 正文

为什么即使所有权限设置正确,Nginx也会返回403?

如何解决《为什么即使所有权限设置正确,Nginx也会返回403?》经验,为你挑选了3个好方法。

我有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打开()"/ 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"

Kurt.. 179

我遇到了同样的问题,这是由于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> Kurt..:

我遇到了同样的问题,这是由于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目录.


嘿,库尔特,您的答案与下面亚当的答案有关系吗?逐步执行步骤似乎无法解决问题(尽管禁用SELinux可以解决此问题)。遵循Adam的答案DID,即使启用了SELinux,也可以解决此问题。以为您可能对此有更多了解。

2> 小智..:

我遇到了同样的问题.如果您使用的是Fedora/RedHat/CentOS,这可能对您有所帮助:

据SELinux说: setsebool -P httpd_read_user_content 1

希望这可以帮助.



3> 小智..:

首先,您必须运行以下命令以允许Nginx访问文件系统

sudo setsebool -P httpd_read_user_content 1

您可以使用以下命令检查文件或目录:

ls -Z

如果仍然无法访问,则可以尝试使用以下命令更改文件和文件夹的SELinux属性:

chcon -Rt httpd_sys_content_t /path/to/www

但是,以上命令不适用于FUSE或NFS系统下的文件。

要启用来自FUSE挂载的服务文件,您可以使用:

setsebool httpd_use_fusefs 1

要从NFS挂载启用服务文件,可以使用:

setsebool httpd_use_nfs 1

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有