我正在通过reverse_proxy建立Websocket连接。我终于有了Nginx的有效配置,但是我更喜欢使用Apache2。
这些是Nginx中所需的配置行:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
我试图将它们翻译为Apache2,但似乎不起作用:
<If "%{HTTP:upgrade} == 'websocket'">
RequestHeader add Upgrade "websocket"
</If>
RequestHeader set Connection "upgrade"
Apache2只是忽略这些命令。当我更改标题名称时,它们不再被忽略,但这对我没有帮助:
RequestHeader set X-Connection "upgrade"
因此:Apache2似乎忽略了对“ Upgrade”和“ Connection”标头的更改。
((我正在使用调试服务器来打印接收到的所有HTTP请求及其所有标头-因此我可以直接比较Nginx和Apache2请求-因此我知道Apache2会忽略我的命令。]
如何使它在Apache2中工作?
我自己找到了一个解决方案:Apache不允许设置这些标头-相反,您需要使用重写引擎:
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3000/$1 [P,L]
然后,Apache将自动添加正确的“ Upgrade”和“ Connection”标头。