我今天第一次开始使用 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