【发布时间】:2019-06-28 18:08:35
【问题描述】:
我在 Azure(Linux 服务器)上运行了 2 个 Web 应用程序。
一个 webapp 正在运行 NodeBB (v1.12.1) - https://my-forum.azurewebsites.net
不应直接访问此应用,而是将其代理到在 Azure 上运行的第二个 Web 应用。
NodeBB 配置设置为“url”为“https://my-website.azurewebsites.net/forums/”
我在socket.io:origins nconf 中添加了 URL,以便能够从其他 URL 发出 WebSocket 请求。这些值如下所示:
http://my-website.azurewebsites.net:* https://my-website.azurewebsites.net:* https://my-forum.azurewebsites.net:* https://localhost:*
主网站 (https://my-website.azurewebsites.net) 是一个 Node.js & Express 应用程序,其中包含一些前端路由、api 路由并使用 http-proxy-middleware 模块来代理对论坛的请求。它的设置和配置如下所示:
...
const proxy = require('http-proxy-middleware');
const forumProxy = proxy({
target: process.env.FORUM_URL,
changeOrigin: true,
ws: true,
secure: true,
xfwd: true,
logLevel: 'debug'
});
app.use('/forums', forumProxy);
const mainserver = http.createServer(app);
... other config
mainserver.on('upgrade', forumProxy.upgrade);
当我在本地运行主网站 (https://localhost:3000) 并代理 NodeBB 论坛时,我可以看到 WebSocket 已正确建立,并且在网站的本地版本和 Azure 托管的 NodeBB 论坛之间交换了消息。
但是,当网站在 Azure 上时,它的代理 URL 和网站完全正常,但 WebSocket 连接不起作用。主网站发送“2probe”消息,但从未建立连接,也不会交换消息。
按预期直接访问论坛 URL,包括正在交换的 WebSocket 消息。
主网站和论坛都有一个 web.config,其中包含:
<system.webServer>
<webSocket enabled="false"/>
</system.webServer>
这两个应用程序还在服务器上设置了 --web-sockets-enabled=true 值(通过 PowerShell 设置)。
据我了解,这会在服务器上启用 WebSocket,并且 web.config 中的“false”值是关闭 iis WebSockets 并让 Node.js 处理它。
2 个 Azure 服务器通过 WebSocket 相互通信似乎存在问题。 Azure 本地运行良好。
为什么 'https://my-website.azurewebsites.net' 无法与 'https://my-forum.azurewebsites.net' 建立 WebSocket?但是本地到 Azure 可以吗?
【问题讨论】:
标签: node.js azure websocket proxy azure-web-app-service