我目前有一个设置,所有静态文件都由NginX提供,如果没有find静态文件,它将被移动到一个node.js服务器上。 不幸的是,我得到了根请求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.html”文件并将该指令更改为“index index.html”的作品。 但是我真正想要做的是让它看起来像索引位置的节点服务器,而仍然服务我的静态文件,而不看节点。
NB。 如果我把代理服务器设置放在/位置节点服务器服务的根就好(没有静态文件,但它服务的一部分罚款)。
你的try_files指令有一个正斜杠,所以nginx会在去到example.org/根目录时尝试服务这个目录。
代替:
location / { try_files $uri $uri/ @proxy; }
使用:
location / { try_files $uri @proxy; }
首先抱歉我的英语不好,我想我解决你的问题,你需要做一些这样的想法:
定义拳头你的静态竞争:
location ~ \.(jpg|png|etc)$ { root /web/sites/this.site.tld/static; }
然后做一个代理传递给你的节点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 {
或类似的东西。