【问题标题】:Node.js app doesn't load when location path is not /当位置路径不是 / 时,Node.js 应用程序不会加载
【发布时间】: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 代码,不是吗?我认为代理应该处理这个问题,所以当我点击 nginx 123.456.78.910/projectb 时,它请求我的 Node.js 应用程序在 127.0.0.1:8081 上运行。
  • 您可以在文件中使用 html <base> 标签将基本路径指定为 /projectb,或者您应该直接通过 nginx 而不是节点提供静态文件,然后您可以为那些没有 @ 的文件提供服务987654340@路径。

标签: node.js nginx


【解决方案1】:

如果没有location / location /projectb 不能工作,那么这意味着location /projectb 配置不正确。您是否尝试删除 location /projectb 以查看它是否仅适用于 location /

你的 nginx 应该将请求代理到哪个端点?是http://127.0.0.1:8081/ 还是http://127.0.0.1:8081/projectb?我感觉是http://127.0.0.1:8081/projectb

请尝试删除第二个 sn-p 中 proxy_pass http://127.0.0.1:8081/; 行的尾部斜杠。

【讨论】:

  • 是的,它只适用于location /。它应该代理到127.0.0.1:8081/。当我从第二个 sn-p 中删除尾部斜杠时,页面根本不会加载(404 Not Found)。
  • @adamt32,您能指定您正在发出的请求的完整 URL 吗?如果是http://123.456.78.910/projectb,那么location / 规则应该将其代理到127.0.0.1:8081/projectb 而不仅仅是127.0.0.1:8081/
猜你喜欢
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多