Apache2 无法设置 header "Connection"和 "Upgrade"

标签 apache websocket

我正致力于通过 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/

相关文章:

apache - Tomcat、mod_cluster 和 Amazon EC2?

python - 通过异步 websocket 客户端与 websocket 服务器保持连接

django - 无法通过 group_send 向 Django channel 发送消息

Apache 因自分配 SSL 和 MAMP Pro 5 而失败

linux - 尝试启动时 nginx 权限被拒绝

apache - 如何在 Apache Server 将请求转发给 Tomcat 之前执行任务?

apache - TLS1.3 session 的 SSLSessionID 等效项是什么

Python 3 websockets - 在关闭连接之前发送消息

javascript - Web 套接字 - 服务器负载

javascript - 如何将域名映射到 Websocket 服务器(ws)nodejs?