首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure WebSockets + NodeBB + Node.js代理

Azure WebSockets + NodeBB + Node.js代理
EN

Stack Overflow用户
提问于 2019-06-26 14:33:44
回答 2查看 213关注 0票数 0

我有两个webapps运行在Azure (linux服务器)上。

一个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模块代理论坛的请求。其设置和配置如下所示:

代码语言:javascript
复制
...

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论坛时,我可以看到正确地建立了WebSockets,并且在网站的本地版本和Azure托管的NodeBB论坛之间交换消息。

然而,当网站在Azure上时,代理的URL和站点都很好,但是WebSocket连接不起作用。“2探测”消息由主网站发送,但从未建立连接,也没有消息交换。

直接访问论坛URL的工作原理是预期的,包括交换的WebSocket消息。

主网站和论坛都有一个web.config,其中包括:

代码语言:javascript
复制
<system.webServer>
    <webSocket enabled="false"/>
</system.webServer>

这两个应用程序都在服务器(通过PowerShell设置)上设置了启用-web套接字的=真值集。

据我所知,这使得在服务器上启用了WebSocket,而'false‘的web.config中的值是关闭iis WebSockets并让Node.js处理它。

两个Azure服务器通过WebSockets相互交谈似乎有问题。从本地到Azure很好。

为什么“https://my-website.azurewebsites.net”不能将WebSocket设置为“https://my-forum.azurewebsites.net”?但是本地的Azure可以吗?

EN

回答 2

Stack Overflow用户

发布于 2019-06-26 19:08:44

Azure WebApps运行在一个名为沙箱的安全环境中。通过互联网可以访问应用程序的唯一方法是通过已经公开的HTTP (80)和HTTPS (443) TCP端口;应用程序可能不会监听来自互联网的数据包。但是,应用程序可能会创建一个套接字,该套接字可以侦听沙箱中的连接。例如,同一应用程序中的两个进程可能通过TCP套接字相互通信;从沙箱外部传入的连接尝试(尽管它们位于同一台计算机上)将失败。

连接到本地地址(例如localhost,127.0.0.1)的尝试将失败,除非同一沙箱中的另一个进程在目标端口上创建了侦听套接字。

票数 0
EN

Stack Overflow用户

发布于 2019-06-28 10:08:35

我解决了这个问题,并想指出这个问题与Azure无关。

但是,如果其他人正在读取此文件,并且正在使用WebSockets和Node.js,则必须在webapp配置中打开该选项&然后在项目中使用web.config文件禁用iis WebSockets。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56775278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档