1. WebSocket代理的核心需求
当我们需要在Nginx中实现WebSocket代理时,通常是因为要解决前后端分离架构中的实时通信需求。WebSocket协议相比传统的HTTP轮询,能显著降低延迟和服务器负载。我在实际项目中遇到过一个在线协作编辑场景,频繁的文档变更通知通过WebSocket传输,Nginx作为反向代理需要正确处理这些长连接。
传统HTTP代理配置无法满足WebSocket的升级握手(Upgrade)和连接保持特性。这会导致连接在60秒后自动断开(Nginx默认proxy_read_timeout),或者出现101 Switching Protocols响应被截断的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础配置实现
2.1 最小化可行配置
这是经过生产验证的基础配置模板:
nginx复制location /wsapp/ {
proxy_pass http://backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
关键参数说明:
proxy_http_version 1.1:WebSocket必须使用HTTP/1.1Upgrade头:告知后端需要协议升级Connection: upgrade:保持长连接
2.2 连接超时优化
WebSocket连接通常需要长时间保持,建议调整这些参数:
nginx复制proxy_read_timeout 86400s; # 24小时
proxy_send_timeout 86400s;
proxy_connect_timeout 4s;
注意:超时时间需根据业务场景调整。金融行情推送可能需要更长时间,而在线聊天室可以适当缩短。
3. 高级配置技巧
3.1 负载均衡策略
当需要横向扩展WebSocket服务时:
nginx复制upstream ws_cluster {
ip_hash; # 保持会话粘性
se
