【问题标题】:How to do a reverse proxy with node.js for a shiny app如何使用 node.js 为闪亮的应用程序做反向代理
【发布时间】:2026-02-19 10:40:01
【问题描述】:

编辑

我认为问题可能是WebSocket连接没有通过代理node.js。如何授权 WebSocket 的连接?


我有一个托管在 nodeJS 服务器上的网络应用程序。在同一个虚拟机上,我还有一个闪亮的服务器托管应用程序。当请求一些 URL 时,我使用节点将流量重定向到端口 3838(闪亮)。

我在节点上使用此代码:

app.use('/the-shiny-app', proxy({target: 'http://localhost:3838', changeOrigin: true}));

使用此设置,当我继续使用 mydomain/the-shiny-app/* 时,闪亮的应用程序一切正常,除非我尝试在代码框中运行代码。

当我尝试运行代码时,我在 chrome 控制台上收到此错误:

 Connection closed. Info: {"type":"close","code":4503,"reason":"The application unexpectedly exited","wasClean":true}

我所说的代码框的一个例子:

如果我不使用 node.js 并且我将流量(在操作系统级别)从端口 80 直接重定向到 3838,一切正常。

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 3838

我不知道当我们运行代码时浏览器和闪亮服务器之间究竟做了什么样的交换,但可能使用的协议被node.js阻止了。

【问题讨论】:

  • 使用 nginx 作为反向代理,你需要使用proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";,但我不知道如何使用 Shining...nginx.com/blog/nginx-nodejs-websockets-socketio 为什么不使用 nginx 作为反向代理为你做这个吗?
  • 好的,谢谢。代理在 node.js (express) 我现在使用 http-proxy-middleware 并添加ws: true, // proxy websockets。正如你所说,我还必须添加External WebSocket upgrade。我试试看:)

标签: javascript node.js express shiny reverse-proxy


【解决方案1】:

我发现了问题。正如 Antony Gibbs 所说,您需要设置 WebSocket 升级。我正在使用 http-proxy-middleware 你可以在这里找到文档:https://github.com/chimurai/http-proxy-middleware

【讨论】: