尝试访问新站点时,Nginx 显示失败(13:权限被拒绝)

尝试访问新站点时,Nginx 显示失败(13:权限被拒绝)

我正在尝试建立自己的网络服务器,以便进一步了解服务器管理。

public_html我已决定从用户 /home 目录内的文件夹为每个站点提供文件。

我已经安装了 Nginx,编辑了 nginx.conf 并将用户名/组更改为 nginx。

我为新站点添加了新用户,并将 vhosts 文件更改为如下所示;

server {
    listen         80;
    listen         [::]:80;
    server_name    website.com www.website.com;
    root           /home/website/public_html;
    index          index.html index.htm index.php;

    location / {
      try_files $uri $uri/ =404;
    }

    location ~* \.php$ {
    fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

但是当我尝试访问该网站时,它返回 404 Not Found。

当我检查错误日志时,看到以下错误;

2019/01/02 19:49:45 [crit] 18248#0: *1 stat() "/home/website/public_html/" failed (13: Permission denied)

有人曾经遇到过这种情况并能告诉我如何处理吗?

我查看了一下并看到了一些关于 getenforce 的帖子,但是当我运行它时,它显示Disabled

如果有什么区别的话,我正在使用 CentOS7。

干杯,

答案1

按照这个指南网站为我做了(作为 root):

setsebool -P httpd_enable_homedirs 1
setenforce 0
systemctl restart nginx
systemctl daemon-reload

答案2

调试此类 nginx 错误的一个好方法是检查日志并使用namei检查 nginx 是否有权访问所有祖先文件夹。

考虑由于此配置/static/vendor.js而产生的结果:HTTP 403

server {
    listen 80;

    location /static/ {
    alias /home/ubuntu/bla/front/dist/;
    }
}

首先检查 nginx 访问日志,在 ubuntu 中它在这里:

tail /var/log/nginx/error.log

我说:

2023/07/25 11:52:05 [error] 15138#15138: *3 open() "/home/ubuntu/bla/front/dist/vendor.js" failed (13: Permission denied), client: 145.90.169.214, server: , request: "GET /static/vendor.js HTTP/1.1", host: "129.125.55.156

我注意到该文件/home/ubuntu/bla/front/dist/vendor.js确实存在,因此我检查www-data(nginx 用户)是否可以访问它:

sudo -u www-data namei /home/ubuntu/bla/front/dist/vendor.js

f: /home/ubuntu/bla/front/dist/vendor.js
 d /
 d home
 d ubuntu
   bla - Permission denied

显然bla无法访问该文件夹,这可能是由于没有rx该文件夹的权限ubuntu。也就是说,如果无法读取父文件夹,则子文件夹是不可见的。我将使用 来修复此问题setfacl,这是一种无需更改文件的用户和组即可提供细粒度 ACL 权限的方法。

sudo setfacl -m g:www-data:rx /home/ubuntu/

现在:

sudo -u www-data namei /home/ubuntu/bla/front/dist/vendor.js

f: /home/ubuntu/bla/front/dist/vendor.js
 d /
 d home
 d ubuntu
 d bla
 d front
 d dist
 - vendor.js

该文件可以通过访问www-data,并且nginx也403消失了。

答案3

您的主目录权限拒绝访问 nginx。

尝试:

ls -ld /home/website

然后

setfacl -R -m u:nginx:rwx /home/website

或者

chown -R nginx:nginx /home/website
chmod 655 /home/website

答案4

对我来说,解决方案是将权限设置/home/user/public_html为 755。默认情况下,它是使用 751 权限创建的。这阻止了 nginx 用户“读取”它。某些 Web 托管面板(如 VestaCP、CPanel 等)在通过其界面添加新网站时可能会无意中这样做。

解决方案:( sudo chmod 755 ~/public_html调整路径至您的public_html文件夹)

相关内容