我在Azure WebApp上遇到了websockets的问题。
我从github克隆了Node-red并将其发布到Azure中的全新WebApp(使用VisualStudioOnline)。比我安装所有包并使用grunt构建解决方案。 (如here所述)
之后我更改了settings.js并配置了azure来支持websockets。 (如here所述)。
但是websockets仍然不起作用: Chrome确实显示以下错误:
连接建立错误:net :: ERR_CONNECTION_TIMED_OUT
我在服务器端看不到任何指示问题的日志/警告。
答案 0 :(得分:1)
问题源于我们的代理。 Here是描述问题的帖子。
如果使用未加密的WebSocket连接(ws://),则在透明代理服务器的情况下,浏览器不知道代理服务器,因此不会发送HTTP CONNECT。因此,今天的连接几乎可能失败。
如果使用加密的WebSocket安全连接(wss://),则在透明代理服务器的情况下,浏览器不知道代理服务器,因此不会发送HTTP CONNECT。但是,由于线路流量是加密的,因此中间透明代理服务器可能只允许加密流量通过,因此如果使用加密的WebSocket连接,WebSocket连接将有更好的机会成功。
因此我只是使用以下重写规则(web.config)强制重定向到HTTPS站点
<rule name="https redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
并且一切都按预期工作。
答案 1 :(得分:0)
请注意以下几点,并在您的应用程序中进行修改,然后重试。
grunt build
来完成您的应用程序。尝试删除忽略文件夹
coverage
credentials.json
flows*.json
nodes/node-red-nodes/
node_modules
public
locales/zz-ZZ
nodes/core/locales/zz-ZZ
在.gitignore
中,然后在Azure上部署妓女已完成的项目。
修改uiPort: process.env.PORT || 1880,
文件中的settings.js
。
如有任何疑问,请随时告诉我。