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

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

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;
    }

}

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"

答案1

错误日志说得很清楚:

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

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

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

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

@sebasth 的评论是正确的:

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

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

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

答案2

chmod 777 /var/www/your_site 

解决了问题

相关内容