LiteSpeed多端口WebSocket代理配置问题求助
多端口WebSocket代理的正确配置方案
你的配置存在几个关键问题:
- 重复的
ProxyPass /会导致规则冲突,LiteSpeed只会生效最后一条,前两条完全无效; - RewriteRule中使用
http://协议不匹配WebSocket,应该用ws://(加密场景用wss://); - 正则规则
^websocket$仅匹配精确的/websocket路径,无法覆盖带子路径的请求。
以下是两种可行的正确配置方式:
方式一:使用RewriteRule(灵活适配路径)
这种方式适合需要处理复杂路径匹配的场景,规则会自动传递子路径到后端服务:
<IfModule mod_rewrite.c> RewriteEngine On # 映射 /websocket 路径到8080端口的WebSocket服务 RewriteRule ^websocket(/.*)?$ ws://sample:8080$1 [P,L] # 映射 /second 路径到8081端口的WebSocket服务 RewriteRule ^second(/.*)?$ ws://sample:8081$1 [P,L] # 映射 /third 路径到8082端口的WebSocket服务 RewriteRule ^third(/.*)?$ ws://sample:8082$1 [P,L] </IfModule>
(/.*)?:匹配路径后的任意子部分,$1将这部分传递给后端,保证请求路径完整;[P]:触发LiteSpeed的代理机制;[L]:匹配当前规则后停止后续规则处理,避免冲突。
方式二:使用ProxyPass(直观清晰)
如果路径规则简单,直接用ProxyPass更易维护,记得搭配ProxyPassReverse处理响应头:
# 代理 /websocket 到8080端口 ProxyPass /websocket ws://sample:8080/websocket ProxyPassReverse /websocket ws://sample:8080/websocket # 代理 /second 到8081端口 ProxyPass /second ws://sample:8081/second ProxyPassReverse /second ws://sample:8081/second # 代理 /third 到8082端口 ProxyPass /third ws://sample:8082/third ProxyPassReverse /third ws://sample:8082/third
ProxyPassReverse用于修正后端服务返回的响应头,确保重定向、Cookie等信息正确对应前端路径。
额外注意事项
- 确认LiteSpeed已开启WebSocket支持(在服务器全局配置或虚拟主机配置中启用WebSockets选项);
- 服务器防火墙需允许LiteSpeed访问后端的8080、8081、8082端口;
- 若使用HTTPS对外提供服务,将配置中的
ws://替换为wss://,LiteSpeed会自动处理SSL终止,后端仍可使用ws://通信。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

