NodeJS + Apache Proxy,在路由安全的Websocket时遇到麻烦(请访问Apache配置帮助)

问题描述 投票:0回答:1

我在这里浏览了无数关于如何执行此操作的帖子,但我无法使这个简单的任务正常运行。我将Apache用作代理,该代理应该加密/解密TSL数据包,然后与NodeJS服务器进行不安全的通信。问题是Web应用程序加载正常,但是websocket失败并显示错误404(未找到),而我之前遇到过错误200(握手问题)。我尝试了许多不同的配置,但无法使用。

这就是我在客户端的内容。

const connection = new WebSocket('wss://example.com/wss'); 

这里使用wss://而不是ws://,因为我想建立安全的连接。在服务器端,我只有标准

ws.on('connection', w => {
    w.on('message', msg => {
        var data = JSON.parse(msg);
        // do something with the message ... 
    });
});

这是我的Apache配置文件

ServerName www.example.com                                                                                                                                                                                                                                                                                                                                                                                                                                                     RewriteEngine on
RewriteCond %{HTTP:Upgrade}=websocket [NC]
RewriteRule /(.*) wss://127.0.0.1:3000/$1 [P,L]

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLProxyEngine on

ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ProxyPass /wss ws://127.0.0.1:3000/
ProxyPassReverse /wss ws://127.0.0.1:3000/

在Apache方面,我不确定是否应该为ProxyPass使用wss://ws://,因为它在Apache和NodeJS之间应该是不安全的。我在这里将其设为ws://,但两种方法均无效。对于此配置,我得到404错误。

任何帮助将不胜感激!谢谢

node.js apache websocket reverse-proxy mod-proxy
1个回答
0
投票

我用Nginx反向代理解决了这个问题,

问题是我将套接字连接设置为在端口8080上,但是为端口3000设置了代理。如果将它们放在同一端口上,则该问题将得到解决。

即应用服务器,

const ws = new WebSocket.Server({port: 3001});

Apache

ProxyPass /wss ws://127.0.0.1:3001/
ProxyPassReverse /wss ws://127.0.0.1:3001/
© www.soinside.com 2019 - 2024. All rights reserved.