Nginx 403 错误,当 nginx.conf 设置为从 /websites 提供服务时

Shi*_*ilo 1 users permissions nginx

我在目录中创建了一个websites文件夹/,并使用sudo chmod -R 777 /websites/.

之后,我进行了更改/etc/nginx/conf.d/default.conf以指向websites目录:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /websites;
        index  index.html index.htm;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /websites/nginx/html;
    }

}
Run Code Online (Sandbox Code Playgroud)

但是403 Forbidden当我尝试浏览到服务器的公共 ip 时,我遇到了, 。

为什么会发生?我该如何解决?

我在 nginx error.log 中有这个:

2017/08/27 20:41:03 [error] 3849#3849: *37 "/websites/index.html" is
forbidden (13: Permission denied), client: **.**.130.159, server:
localhost, request: "GET / HTTP/1.1", host: "**.**.**.120"
Run Code Online (Sandbox Code Playgroud)

pet*_*erh 6

错误日志非常清楚地说:

  • 你的 nginx 会尝试读取/websites/index.html,但它不能
  • 这就是它给出 403 错误的原因,而不是因为它的配置。

这是因为13: Permission denied. 这是系统错误。因此,您的 nginx 配置良好,它尝试读取该文件,但不能。

下一个问题是,为什么不能。首先,您应该检查它的作用。向运行 nginx 的用户(可能是 www-data,所以命令是 : sudo -u www-data /bin/bash),并尝试自己读取该文件 ( cat /websites/index.html)。

下一步取决于,结果是什么。

@sebasth 在他的评论中是正确的:

文件/文件夹的权限可能错误,或/和 SELinux 策略不允许访问。如果您启用了 SELinux,您应该检查审核日志(诸如此类的工具audit2why可能会有所帮助)。

我认为最可能的两种结果:

  1. 尽管您的chmod命令看起来没问题,但权限设置不正确
  2. 有一些 SELinux 能让你的生活更美好。