<-
Apache > HTTP Server > 文档 > 2.4 版 > 模块

Apache 模块 mod_proxy_wstunnel

可用语言:  en  |  fr 

描述用于 mod_proxy 的 WebSockets 支持模块
状态扩展
模块标识符proxy_wstunnel_module
源文件mod_proxy_wstunnel.c
兼容性在 httpd 2.4.5 及更高版本中可用

摘要

弃用

自 Apache HTTP Server 2.4.47 起,协议升级(隧道)可以更好地由 mod_proxy_http 处理。

参见 协议升级

此模块需要 mod_proxy 的服务。它提供对将 WebSocket 连接隧道传输到后端 WebSocket 服务器的支持。连接会自动升级到 WebSocket 连接。

HTTP 响应

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=NONEupgrade=ANY 值可用于测试/强制升级,但出于安全原因,不建议在生产环境中使用它们。NONE 表示省略对标头的检查,但仍然会始终发生升级/隧道传输到 WebSocket。ANY 表示升级/隧道传输将使用客户端请求的任何协议进行。

Support Apache!

指令

错误修复清单

另请参见

top

ProxyWebsocketFallbackToProxyHttp 指令

描述指示此模块让 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 请求。

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处发布的评论应指向有关改进文档或服务器的建议,如果它们已实施或被认为无效/偏离主题,则可能被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表