Laravel Reverb在VPS中WebSocket连接失败求助
本地环境Laravel Reverb的WebSocket连接正常,但VPS中连接失败,报错如下:
app-91M7mm_A.js:13 WebSocket connection to 'wss://dev.srv675327.hstgr.cloud/app/ubdzibtxkxbc1lnmciqq?protocol=7&client=js&version=8.4.0-rc2&flash=false' failed:
已尝试更换端口、排查防火墙和SSL但未解决,可按以下步骤逐一排查:
确认Reverb服务状态
- 执行
ps aux | grep reverb检查Reverb进程是否在运行 - 手动启动服务
php artisan reverb:start,观察控制台是否有启动报错 - 查看Reverb日志文件
storage/logs/reverb.log,定位运行时错误信息
- 执行
验证端口监听状态
执行ss -tulpn | grep LISTEN,确认Reverb使用的端口(如6001)是否处于监听状态,且绑定地址为0.0.0.0(允许外部访问),而非127.0.0.1(仅本地可访问)检查反向代理配置(Nginx/Apache)
若使用Nginx作为反向代理,需确保WebSocket转发规则正确:location /app { proxy_pass http://127.0.0.1:6001; 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 -t验证配置语法,无误后重启Nginx。Apache环境需启用mod_proxy、mod_proxy_http、mod_proxy_wstunnel模块,并配置对应代理规则。核对Reverb环境变量配置
检查.env文件:REVERB_HOST需设置为VPS公网IP或域名,而非127.0.0.1REVERB_PORT需与反向代理配置的后端端口一致REVERB_SCHEME设为https(对应wss连接),同时确认SSL证书有效(可执行openssl s_client -connect dev.srv675327.hstgr.cloud:443验证)
测试端口外部可达性
使用curl模拟WebSocket握手请求:curl -I -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: dev.srv675327.hstgr.cloud" -H "Origin: https://dev.srv675327.hstgr.cloud" "https://dev.srv675327.hstgr.cloud/app/ubdzibtxkxbc1lnmciqq?protocol=7&client=js&version=8.4.0-rc2&flash=false"若请求失败,需检查VPS服务商的安全组/网络ACL是否开放了对应端口(包括Reverb服务端口和443端口)
确认客户端连接配置
检查前端代码中的Reverb连接参数,确保使用VPS域名而非本地地址:import { createReverbProvider } from '@laravel/reverb'; createReverbProvider({ authEndpoint: '/api/broadcasting/auth', host: 'dev.srv675327.hstgr.cloud', port: 443, scheme: 'wss', });排查SSL证书问题
- 确认域名SSL证书未过期、域名匹配,且包含完整证书链
- 生产环境避免使用自签名证书,若必须使用需在客户端信任该证书
内容的提问来源于stack exchange,提问作者Wahidul Alam

