OpenLiteSpeed部署Laravel Reverb遇Cookie限制致WebSocket连接失败
问题背景
部署环境:OpenLiteSpeed v1.8.3 + Laravel v12 + Vue v3.5 + LSPHP 8.4,使用Laravel Reverb + Echo实现实时通知。本地测试正常,但线上出现以下问题:
- 未登录时Reverb与Echo可正常建立WebSocket连接、订阅监听;
- 用户登录后新增刷新Token Cookie,总Cookie大小超过1452字节,刷新页面后连接失败:
- Chromium系浏览器报错:WebSocket握手错误:意外响应码200
- Epiphany(类Safari)连接建立后立即关闭
- Firefox因自动截断Cookie请求头未受影响
- 已配置OLS官方反向代理、WebSocket Proxy,且用Supervisor维持Reverb进程,问题仍存在。
核心原因
WebSocket握手阶段的HTTP请求头(包含Cookie)受TCP MSS限制,当总大小超过1452字节时,OLS或Reverb无法正常处理请求,导致握手失败。
解决方案
1. 调整OpenLiteSpeed请求头大小限制
OLS默认对请求头大小有严格限制,可通过管理面板修改:
- 进入OLS管理面板,依次选择
Server Configuration>Tuning - 将
Max Request Header Size从默认值(通常1024或2048)修改为4096 - 同步检查
Max Request Body Size,确保不会限制请求体 - 保存配置后重启OLS服务
2. 剥离WebSocket请求的Cookie头(推荐)
Reverb的WebSocket连接无需携带所有Cookie(如刷新Token),可通过OLS重写规则移除无关Cookie:
- 进入对应虚拟主机的
Rewrite设置页面 - 添加以下重写规则(假设Reverb的WebSocket路径为
/ws):
RewriteCond %{REQUEST_URI} ^/ws [NC] RewriteRule ^(.*)$ http://127.0.0.1:8080/$1 [P,L,E=NO_COOKIE:1]
- 打开Reverb对应的
External App配置,在Environment字段添加NO_COOKIE=1,并在代理时清除Cookie头:
若OLS启用了Header模块,可直接在重写规则后追加Header unset Cookie
3. 优化客户端Cookie大小
- 缩短刷新Token长度,或改用更紧凑的Token格式(如精简JWT的Payload内容)
- 将非必要Cookie设置为
HttpOnly,并限制其生效路径,避免WebSocket请求携带无关Cookie - 考虑将部分状态迁移至服务器端存储,减少客户端Cookie负载
4. 调整Reverb配置
- 编辑
config/reverb.php,增大请求大小限制:
'options' => [ 'max_request_size' => 4096, // 调整为足够容纳大请求头的数值 'headers' => [ 'Access-Control-Allow-Origin' => env('APP_URL'), ], ],
- 确认
.env中REVERB_PORT与OLS代理配置的后端端口一致,Reverb监听地址设为127.0.0.1(仅本地代理使用)
5. 验证WebSocket Proxy配置
确保OLS的WebSocket代理设置正确:
- 进入虚拟主机的
WebSocket Proxy页面,启用Enable WebSocket Proxy - 设置
Backend Host为127.0.0.1,Backend Port为Reverb监听端口(默认8080) - 设置
URI为/ws(匹配Reverb默认WebSocket路径)
内容的提问来源于stack exchange,提问作者OMARIANUS
相关产品推荐
相关产品推荐

