我在端口node.js express
上获得了3000
个网站。它配置为使用nginx。
它通过nginx运行良好,直到我决定配置nginx直接从public
文件夹获取css,js和图像文件而没有node.js表达:
/etc/nginx/sites-enabled# cat myDomain.com.public
server {
listen 80;
server_name myDomain.com;
access_log /var/log/nginx/myDomain.com.access.log;
location / {
proxy_pass http://127.0.0.1:3000/;
}
location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) {
root /root/pathToNodeJsExpressSiteFolder/public;
access_log off;
expires max;
}
}
但现在这个网站没有css和js。它返回403 forbidden
请求它们:
style.css
/stylesheets
GET
403
Forbidden
我做错了什么?
答案 0 :(得分:4)
对于nginx文件系统上的那些静态资源,它需要对目录的读取和执行权限以及此目录的所有父目录。如果您在nginx错误日志中找到了一些条目,如:
open() "/root/pathToNodeJsExpressSiteFolder/public/stylesheets/style.css" failed (13: Permission denied)
然后你需要:
$ sudo chmod +rx /root/pathToNodeJsExpressSiteFolder/public
$ sudo chmod +rx /root/pathToNodeJsExpressSiteFolder
$ sudo chmod +rx /root
注意:建议不要使用$ sudo chmod +rx /root
,因为它始终会限制非root用户访问/root
。
答案 1 :(得分:0)
403 forbidden
响应可能与nginx进程无关,无法读取文件。检查运行public
的用户是否可以递归读取文件夹nginx
,并在需要时更改权限:
sudo chmod -R 744 /root/pathToNodeJsExpressSiteFolder/public