Appearance
问题现象
管理员登录平台后台/门店后台,或用户在移动端/PC端打开在线客服聊天时,浏览器控制台报错:
WebSocket connection to 'wss://www.yourdomain.com/ws' failedWebSocket is closed before the connection is established- 聊天界面右下角提示“网络已断开”或无法实时收到新消息。
根本原因与排查步骤
检查 Nginx 站点配置中的 WebSocket 反向代理(核心)
WebSocket 握手依赖 HTTP Upgrade 协议头。 打开 Nginx 站点配置文件,确保反向代理规则中包含以下 WebSocket 升级配置:
nginx
location / {
proxy_pass http://127.0.0.1:20698; # 或对应 Swoole 监听端口
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_read_timeout 600s; # 保持长连接
}重载 Nginx:nginx -s reload。
检查各前端源码中的 WS 地址配置
- 管理后台(Admin / Store / Cashier / Supplier): 在各前端目录下的
setting.js中,确认wsSocketUrl(或长连接地址)配置为正确的线上域名(通常形如wss://你的域名/ws或wss://你的域名)。 - 移动端(Uniapp): 在
view/uniapp/config/app.js中,确认VUE_APP_WS_URL配置为wss://你的域名/ws。 - 注意:HTTPS 站点必须使用
wss://协议,HTTP 站点使用ws://协议。
检查 Swoole WebSocket 监听服务状态
登录服务器终端,检查 Swoole 守护进程运行状态:
bash
supervisorctl status ebaozu_v4若处于 STOPPED 或 FATAL 状态,请查看 runtime/log/ 日志排查端口占用或代码启动报错。