我正在尝试建立自己的网络服务器,以便进一步了解服务器管理。
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文件夹)