1Panel反向代理配置WebSocket解决实时业务断开问
在部署基于WebSocket的实时业务(如在线聊天、协同编辑、行情推送)时,如果通过1Panel反向代理对外提供服务,经常遇到连接建立后不久自动断开的问题。这通常是因为反向代理默认未将WebSocket升级请求转发到后端服务。
问题原因
WebSocket协议通过HTTP Upgrade机制将连接从HTTP切换为WebSocket。反向代理(如Nginx)必须设置对应的请求头,否则客户端与后端之间的握手无法完成。1Panel默认生成的反向代理配置未包含这些请求头,导致实时连接不稳定。
配置步骤
1. 创建反向代理
登录1Panel管理面板,进入“网站” -> “反向代理”,点击“创建反向代理”,填写域名、代理类型(HTTP)、后端服务地址及端口。例如后端地址为 http://127.0.0.1:8080。
2. 修改Nginx配置
创建后,在反向代理列表中找到对应站点,点击“配置”进入配置文件编辑模式。在location /块中添加以下配置:
location / {
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_read_timeout 3600s;
proxy_send_timeout 3600s;
}其中:
- proxy_http_version 1.1:确保使用HTTP/1.1协议,HTTP/1.0不支持Upgrade头部。
- proxy_set_header Upgrade:将客户端的升级请求传递给后端。
- proxy_set_header Connection "upgrade":固定连接类型为升级,使Nginx与后端之间的连接保持打开。
- proxy_read_timeout 与 proxy_send_timeout:设置长时间无数据时的超时时间,防止代理主动断开空闲连接。
注意:Connection头的值必须为"upgrade",不能使用默认的$connection_upgrade变量(除非已定义map规则)。若使用标准变量,可参考Nginx官方文档配置map。
3. 保存并重载配置
保存配置文件后,在1Panel中点击“重载”或直接在Nginx容器中执行nginx -s reload。重载不会中断已有的连接,建议在业务低峰期操作。
验证方法
使用浏览器开发者工具或命令行工具(如websocat)连接WebSocket服务,观察是否长时间保持连接。也可查看后端服务日志,确认接收到了包含Upgrade头的请求。
注意事项
- 如果后端服务部署在跨域环境,还需配置CORS相关请求头,这与WebSocket无关。
- 某些实时业务需要心跳机制,代理超时时间应大于前端心跳间隔。
- 1Panel的Web界面可能因版本不同略有差异,但核心配置逻辑一致。