我正致力于通过 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 只是忽略这些命令。当我更改 header 名称时,它们不再被忽略,但这对我没有帮助:
RequestHeader set X-Connection "upgrade"
因此:Apache2 似乎忽略了对“升级”和“连接” header 的更改。
(我正在使用调试服务器打印接收到的所有 HTTP 请求及其所有 header - 因此我可以直接比较 Nginx 和 Apache2 请求 - 因此我知道 Apache2 忽略了我的命令。)
我怎样才能使它在 Apache2 中工作?
最佳答案
我自己找到了解决方案:Apache 不允许设置这些 header - 相反,您需要使用重写引擎:
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3000/$1 [P,L]
Apache 然后会自动添加正确的“升级”和“连接” header 。
关于Apache2 无法设置 header "Connection"和 "Upgrade",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60475454/