我目前有一个设置,其中所有静态文件都由 NginX 提供,如果找不到静态文件,则将其移动到 node.js 服务器上。不幸的是,我收到 root 请求的 403 错误。其他一切都正常。
server {
listen *:80;
error_page 404 = /404.html;
root /web/sites/this.site.tld/static;
index home;
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_X_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://thisSiteApp;
proxy_redirect off;
}
}
upstream thisSiteApp{
server 127.0.0.1:3000;
}
我确信问题出在 index 指令上。将“index.html”文件放在静态中并将指令更改为“index index.html”即可。但我真正想要做的是让它在节点服务器上查找索引位置,同时仍然在不查看节点的情况下提供我的静态文件。
注意:如果我将代理设置放在 / 位置下,节点服务器就可以很好地为根提供服务(虽然没有静态文件,但它可以很好地完成其部分工作)。
答案1
您的 try_files 指令有一个正斜杠,因此 nginx 在直接转到 的裸根目录时将尝试为该目录提供服务example.org/
。
代替:
location / {
try_files $uri $uri/ @proxy;
}
使用:
location / {
try_files $uri @proxy;
}
答案2
首先对我的英语不好表示抱歉,我想我理解你的问题,你需要做一些这样的思考:
首先定义你的静态内容:
location ~ \.(jpg|png|etc)$ {
root /web/sites/this.site.tld/static;
}
然后将代理传递到你的 node js 服务器
location / {
proxy_pass http://127.0.0.1:3000;
}
或者你的方法: location / { try_files $uri $uri/ @proxy; }
location @proxy {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_X_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://thisSiteApp;
proxy_redirect off;
}
}
上游 thisSiteApp{
或类似的东西。