2

node.js express在港口找到了站点3000。它被配置为与 nginx 一起工作。它通过 nginx 运行良好,直到我决定将 nginx 配置为直接从public文件夹中获取 css、js 和图像文件,而不使用 node.js express:

/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

我做错了什么?

4

2 回答 2

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

于 2013-09-13T13:23:49.640 回答
0

响应可能与403 forbiddennginx 进程无权读取文件有关。检查public运行的用户是否可以递归读取该文件夹,nginx并在需要时更改权限:

sudo chmod -R 744 /root/pathToNodeJsExpressSiteFolder/public
于 2013-09-06T13:15:51.343 回答