节点红色 - 从端口1880重定向到子目录后丢失连接

时间:2017-02-23 13:57:07

标签: apache centos node-red

我在 Cent OS 7.x Apache 2.4.6(CentOS)的虚拟机上安装了 NodeRed

如果我打开网址http://10.1.1.1:1880/,一切正常。我可以部署节点并查看调试。但我需要在特殊位置使用Node Red。 下一步是在httpd.conf中配置代理通行证。

结果:节点红色在http://10.1.1.1/nr/下可用。但几秒钟后,我收到以下错误消息。

Lost connection to server, reconnecting in 44s. Try now

然后我尝试了同样的方法,也将端口配置添加到了443, 结果:节点红色在https://10.1.1.1/nr/下可用,并且它正在工作几秒钟。然后出现相同的错误消息(+或 - 几秒钟)

Lost connection to server, reconnecting in 54s. Try now

然后我在浏览器中检查了控制台 错误代码:

WebSocket connection to 'ws://10.1.1.1/nr/comms' failed: Error during WebSocket handshake: Unexpected response code: 404 a @ red.min.js:16

好吧,这似乎是WebSocket的一个问题。 如果有人有想法,那很好,因为我尝试了不同的解决方案,添加了加载模块,并且目前还没有真正的想法。一切顺利。

ps:这是我在httpd.conf中的代理传递设置

<VirtualHost *:80>
  ServerName 10.1.1.1
  RewriteEngine On
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://localhost:1880/$1 [P,L]
  ProxyPass /nr/ http://127.0.0.1:1880/ timeout=360
  ProxyPassReverse /nr/ http://127.0.0.1:1880/
</VirtualHost>

3 个答案:

答案 0 :(得分:2)

我是这样做的:

function preStart() {
   // You can run a function like this before navigating
   console.log("Hello");
   window.location = 'https://www.google.com/';
   // You can't run a function once you've navigated to Google
   // because you can't execute arbitrary scripts on pages/domains
   // that you don't own.
}

// preStart will be executed when the `onload` event fires
window.onload = preStart;

这解决了我的问题。如果您启用了TLS,请更改ws:to wss:

答案 1 :(得分:1)

我不确定RewriteRule正在做什么,但我认为您需要使用mod_proxy_wstunnel模块和ProxyPass这样的规则:

ProxyPass "/nr/comms"  "ws://localhost:1880/comms"

答案 2 :(得分:0)

使用Node-Red 1.0(如果使用此配置)

RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule .* "ws://localhost:1880%{REQUEST_URI}" [P]

ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:1880/
ProxyPassReverse / http://localhost:1880/

使用重写引擎可使websocket正常工作。同时,如果我使用/

的/ nodered / url instad,则无法正常工作