Laravel 11 Reverb生产环境WebSocket连接失败求助
本地环境正常,但生产环境无法建立WebSocket连接,报错:
WebSocket connection to wss://subdomain.domain.com/app/... failed生产环境.env配置:
REVERB_APP_ID=401132 REVERB_APP_KEY=vcgwoutdwqj3qek4ixsv REVERB_APP_SECRET=o1jvqubryshtorosmgbz REVERB_HOST="subdomain.domain.com" REVERB_PORT=443 REVERB_SCHEME=https REVERB_SERVER_HOST="server-ip" REVERB_SERVER_PORT=8080 VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" VITE_REVERB_HOST="${REVERB_HOST}" VITE_REVERB_PORT="${REVERB_PORT}" VITE_REVERB_SCHEME="${REVERB_SCHEME}"Reverb debug日志显示服务器启动在
server-ip:8080 (subdomain.doamin.com),且正常执行连接清理和心跳检测操作。已执行npm run build,调整过REVERB_PORT和REVERB_HOST参数,问题仍未解决。
排查与解决方案
1. 移除.env变量的多余引号
你的.env中REVERB_HOST、REVERB_SERVER_HOST等变量带了双引号,会导致实际读取的参数包含引号,直接引发连接错误。修改后应为:
REVERB_HOST=subdomain.domain.com REVERB_SERVER_HOST=server-ip VITE_REVERB_HOST="${REVERB_HOST}" VITE_REVERB_PORT="${REVERB_PORT}" VITE_REVERB_SCHEME="${REVERB_SCHEME}"
修改后重启Reverb服务和应用服务器,重新执行npm run build。
2. 配置反向代理(以Nginx为例)
生产环境使用HTTPS时,需要通过Nginx将wss请求转发到Reverb的8080端口,确保配置包含以下规则:
location /app/ { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
配置完成后重启Nginx,确保无配置错误。
3. 检查防火墙/安全组规则
- 确保服务器8080端口允许本机(127.0.0.1)访问(用于反向代理转发)
- 若Reverb与应用服务器分开部署,需确保应用服务器能访问Reverb服务器的8080端口
- 检查云服务商安全组规则,放行相关端口
4. 验证SSL证书有效性
确认subdomain.domain.com的SSL证书有效且受信任,避免浏览器因证书问题阻断WebSocket连接。可直接访问https://subdomain.domain.com查看证书状态。
5. 确认Reverb服务运行状态
执行以下命令检查Reverb状态:
php artisan reverb:status
若服务未正常启动,查看详细日志定位问题:
php artisan reverb:start --debug
重点关注绑定地址失败、权限不足等错误信息。
6. 验证前端连接参数
在浏览器开发者工具的Network面板,查看WebSocket请求的地址和参数,确认host为subdomain.domain.com、port为443、scheme为https,确保编译后的前端参数正确。
内容的提问来源于stack exchange,提问作者Muntasir Hasan

