Apache HTTP Server 2.4 版
描述 | 用于 mod_proxy 的 WebSockets 支持模块 |
---|---|
状态 | 扩展 |
模块标识符 | proxy_wstunnel_module |
源文件 | mod_proxy_wstunnel.c |
兼容性 | 在 httpd 2.4.5 及更高版本中可用 |
此模块需要 mod_proxy
的服务。它提供对将 WebSocket 连接隧道传输到后端 WebSocket 服务器的支持。连接会自动升级到 WebSocket 连接。
Upgrade: WebSocket Connection: Upgrade
可以使用 ProxyPass
指令将请求代理到像 echo.websocket.org
这样的 WebSocket 服务器。
ProxyPass "/ws2/" "ws://echo.websocket.org/" ProxyPass "/wss2/" "wss://echo.websocket.org/"
可以通过在 HTTP 指令之前指定 WebSocket ProxyPass
指令,同时代理 HTTP 和 WebSocket,并使一组特定的 URL 仅限 WebSocket。
ProxyPassMatch ^/(myApp/ws)$ ws://backend.example.com:9080/$1 ProxyPass / http://backend.example.com:9080/
可以通过使用 RewriteRule
指令配置 WebSocket 代理,同时代理 HTTP 和 WebSocket,其中 WebSocket URL 不是仅限 WebSocket 的,或者事先未知。
ProxyPass / http://example.com:9080/ RewriteEngine on RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/?(.*) "ws://example.com:9080/$1" [P,L]
可以使用 mod_proxy_balancer
实现对多个后端的负载均衡。
该模块还可以通过在 ProxyPass
指令中将 upgrade 参数设置为某个自定义协议名称,来升级到 WebSocket 以外的其他协议。特殊的 upgrade=NONE
和 upgrade=ANY
值可用于测试/强制升级,但出于安全原因,不建议在生产环境中使用它们。NONE
表示省略对标头的检查,但仍然会始终发生升级/隧道传输到 WebSocket。ANY
表示升级/隧道传输将使用客户端请求的任何协议进行。
描述 | 指示此模块让 mod_proxy_http 处理请求 |
---|---|
语法 | ProxyWebsocketFallbackToProxyHttp On|Off |
默认值 | ProxyWebsocketFallbackToProxyHttp On |
上下文 | 服务器配置,虚拟主机 |
状态 | 扩展 |
模块 | mod_proxy_wstunnel |
兼容性 | 在 httpd 2.4.48 及更高版本中可用 |
自 httpd 2.4.47 起,mod_proxy_http
可以根据 RFC 7230 处理 WebSocket 升级和隧道传输,此指令控制 mod_proxy_wstunnel
是否应该将此操作移交给 mod_proxy_http
,默认情况下是这种情况。
设置为Off 将使 mod_proxy_wstunnel
像在 httpd 2.4.46 及更早版本中那样处理 WebSocket 请求。