具有环境变量的双Apache Websocket代理(mod_proxy_wstunnel)

时间:2019-03-15 22:33:57

标签: apache websocket reverse-proxy

这是双重WebSocket代理的问题。用户在到达目的地之前要经过两台Apache服务器。

总结目标(其中“ X”是整数,例如[0-9] +):

  1. Server1处理SSL,用户访问wss://Server1/X/websocket,该访问转发到ws://Server2/X/websocket
  2. Server2处理将/X/websocket重定向到其他目的地,例如/5/websocket到达一个目的地,/40/websocket到达另一个目的地。

问题

  1. 直接转到ws://Server2:80/5/websocket是可行的,但是
  2. 使用第一台服务器访问wss://Server1/5/websocket无效。以这种方式访问​​Server1时,Server2会引发错误(error.log):
AH01144: No protocol handler was valid for the URL /5/websocket (scheme 'ws'). If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

此错误令人困惑,因为直接访问Server2即可,并且所有必需的模块都已加载到服务器2:

# apache2ctl -M | grep proxy
proxy_module (shared)
proxy_balancer_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)

Server1还具有其他可以正常工作的WebSocket代理,因此,似乎该问题与使用环境变量的方式之间的交互或使用环境变量时如何传递路由路径/报头有关。请参阅下面的“ ROUTE”变量...

第一个Apache2配置为:

<Location /([^;]*)/websocket>
    ProxyPreserveHost On
    SetEnv ROUTE $1
    Order allow,deny
    Allow from all
    ProxyPassMatch ws://somemachine:80/%{ROUTE}/websocket
    ProxyPassReverse ws://somemachine:80/%{ROUTE}/websocket
</Location>

第二台服务器(运行在somemachine:80上)具有以下内容:

<Location /5/websocket>
    ProxyPreserveHost On
    Order allow,deny
    Allow from all
    ProxyPass ws://destinationFor5:80/websocket
    ProxyPassReverse ws://destinationFor5:80/websocket
</Location>
.... more locations follow with a similar pattern

有趣的是,相同类型的配置,但是对于HTTP而不是ws,似乎工作正常。

0 个答案:

没有答案