为什么Nginx没有权限打开此文件?

为什么Nginx没有权限打开此文件?

我今天第一次开始使用 Nginx,而且我对命令行也还很陌生,所以请多包涵。

我有一台CentOS 7服务器,其中托管着一个 index.html 文件,我想从互联网上访问它。但是我收到 403 Forbidden 错误,Nginx 似乎没有权限读取和提供该文件。我正在尝试找出原因。

该网页位于 的主文件夹中/home/Owner/web/apps/webapp/index.html。当我尝试从 Web 访问该文件时,Nginx 记录的错误如下:

[错误] 9887#0:*6“ /home/Owner/web/apps/webapp/index.html”被禁止(13:权限被拒绝),客户端:CLIENT_IP,服务器:my-domain.io,请求:“GET / HTTP/1.1”,主机:“my-domain.io”

服务器上已启用 SELinux。以下是 index.html 文件的 SELinux 安全上下文:

[[电子邮件保护]~]# ls -lZ /home/Owner/web/apps/webapp/index.html

-rw-r--r--. 所有者 所有者 unconfined_u:object_r:httpd_sys_content_t:s0 /home/Owner/web/apps/webapp/index.html

那么该文件是所有人都可读的,问题出在哪里?以下是 nginx 进程的 SELinux 安全上下文:

[[电子邮件保护]~]# ps -auxZ | grep nginx

system_u:system_r:httpd_t:s0 root 9886 0.0 0.0 121508 2132 ? Ss 19:50 0:00 nginx: 主进程 /usr/sbin/ngin

system_u:system_r:httpd_t:s0 nginx 9887 0.0 0.0 121512 3604 ? S 19:50 0:00 nginx:工作进程

system_u:system_r:httpd_t:s0 nginx 9888 0.0 0.0 121512 3604 ? S 19:50 0:00 nginx:工作进程

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 9914 0.0 0.0 112712 960 pts/0 S+ 20:03 0:00 grep --color=auto nginx

我已设置以下 SELinux 标志:

setsebool -P httpd_can_network_connect on

setsebool -P httpd_enable_homedirs

有趣的是,将 SELinux 设置为 Permissive 并setenforce 0不能解决问题。我仍然收到 403 forbidden。我尝试过重启服务器,但无济于事。

以下是 Nginx http 配置:

server {
    listen       80;
    listen       [::]:80;
    server_name  my-domain.io;
    root         /home/Owner/web/apps/webapp;
    
    location /api/ {
        proxy_pass "http://localhost:3333";
    }
}

注意;proxypass的指令/api/,它工作得很好!我可以点击这些路径并从浏览器查询在端口 3333 上运行的 Node 服务。node 执行的文件位于index.html父目录的同级目录中。

我忽略了什么?

答案1

chcon -R -h -t httpd_sys_content_t /home/Owner/web 并编辑 nginx.conf 用户 Owner

或者将所有文件复制到 /usr/share/nginx/html

相关内容