同一 URL 上的 Apache2 WebSockets 反向代理

标签 apache websocket reverse-proxy

如何配置 Apache2 来代理 WebSocket 连接(例如,BrowserSync),如果它是在同一个 URL 上创建的,唯一的区别是标题“升级:websocket”和 URL 模式 ws://?

例如:

HTTP request:
GET http://example.com/browser-sync/socket.io/?... HTTP/1.1
...

WebSocket request:
GET ws://example.com/browser-sync/socket.io/?... HTTP/1.1
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
...

我找到的所有示例,仅重定向某些路径,例如“...”或“ProxyPass/ws/ws://example.com/”

我目前的配置:
ProxyRequests off
<Location />
    ProxyPass http://127.0.0.1:3000/
    ProxyPassReverse /
</Location>

mod_proxy、mod_proxy_http 和 mod_proxy_wstunnel 已启用。

最佳答案

回答我自己。

使用 RewriteEngine,提示由 this post 给出, 和 WebSocket 握手规范:

RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3000/$1 [P,L]

ProxyRequests off
<Location />
    ProxyPass http://127.0.0.1:3000/
    ProxyPassReverse /
</Location>

关于同一 URL 上的 Apache2 WebSockets 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29792372/

相关文章:

java - 服务器使用 Atmosphere IO 定期推送

go - 在 go 中构建一个完整的 HTTP 反向代理需要什么?

azure-active-directory - 带有 OpenIdConnect 的 IIS 反向代理会转到错误的身份提供程序

linux - 在 Linux 上安装 apache2 无法验证 root :root

apache - K8s Nginx 代理未到达 Pod

带有代理的 Java websocket

docker - 如何使用 nginx 容器代理传递到端口 80 上的节点 docker 容器

php - 使用 .htaccess 将子域重定向到特定目录

linux - 设置虚拟主机后出现 403 错误

javascript - 如何防止我的 javascript 锁定浏览器?