配置nginx直接从node.js表示站点的公共文件夹获取js和css

时间:2013-09-06 07:23:30

标签: node.js nginx express

我在端口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

我做错了什么?

2 个答案:

答案 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