如何将Apache配置为代理socket.io服务器

时间:2019-03-30 14:17:53

标签: apache proxy socket.io

我有一个http://example.com:5000/上运行的Web应用程序

网站尝试建立与该服务器的socket.io连接,以交换一些时间紧迫的数据(多人游戏)。

到目前为止一切正常...

现在,我正在尝试将整个产品准备就绪,因此我想在一个更好的URL上提供它:https://myapp.example.com/

为此,我将Apache服务器配置如下:

ProxyPass / http://0.0.0.0:5000/
ProxyPassReverse / http://0.0.0.0:5000/

乍一看一切似乎都可以正常工作-但socket.io无法再从轮询切换到websocket。

Javascript控制台显示此错误:

socket.io.js:8 WebSocket connection to 'wss://myadpp.example.com/socket.io/?EIO=3&transport=websocket&sid=0bef58d5622f4d20b4c1d7f29c97a21d' failed: Error during WebSocket handshake: Unexpected response code: 200

这似乎是一种非常常见的设置-将基于socket.io的webapp隐藏在apache代理后面-但我无法在线找到任何有效的解决方案。

似乎apache不能代理ws://连接,但是我不知道该怎么办。

在这里找到解决方案: WebSockets and Apache proxy : how to configure mod_proxy_wstunnel?

1 个答案:

答案 0 :(得分:0)

尝试加载mod_proxy_wstunnel模块: https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

编辑:

对于第二个问题,请尝试以下操作:

RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://0.0.0.0:5000/$1 [P,L]

RewriteCond %{QUERY_STRING} transport=polling    [NC]
RewriteRule /(.*)           http://0.0.0.0:5000/$1 [P,L]

ProxyPass / http://0.0.0.0:5000/
ProxyPassReverse / http://0.0.0.0:5000/