【发布时间】:2018-02-02 22:36:41
【问题描述】:
由于某种原因,我在 127.0.0.1:8081 上运行的 Node.js 应用程序需要 /。
如果我从这个开始,/ 和 /projectb 都可以加载页面。
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /projectb {
proxy_pass http://127.0.0.1:8081/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
当我将其更改为此时,/projectb 不再能够完全加载页面。当我查看网络选项卡时,一些 (但不是全部) 请求失败,例如一些图像、.js、一些错误的端点。
server {
listen 80;
location /somethingelse {
proxy_pass http://127.0.0.1:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /projectb { # I'd expect this to still work.
proxy_pass http://127.0.0.1:8081/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
总而言之,当我直接点击端口123.456.78.910:8081,当我同时拥有/ 和/projectb 代理到http://127.0.0.1:8081/,以及当我自己代理到/ 时,它可以工作,但不是当我自己代理到/projectb。
为什么会这样?
【问题讨论】:
-
您需要确保应用程序期望的路径是
/projectb,否则生成的 CSS 和 JS 文件路径可能是错误的。否则你需要在 Nginx 本身中处理这些路径 -
关于如何确保 Node.js 应用程序期望路径为
/projectb的任何建议?我不应该更改 Node.js 代码,不是吗?我认为代理应该处理这个问题,所以当我点击 nginx123.456.78.910/projectb时,它请求我的 Node.js 应用程序在127.0.0.1:8081上运行。 -
您可以在文件中使用 html
<base>标签将基本路径指定为/projectb,或者您应该直接通过 nginx 而不是节点提供静态文件,然后您可以为那些没有 @ 的文件提供服务987654340@路径。