我在 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>
答案 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,则无法正常工作