WebSocket代理在Nginx中可满足弹幕系统转发需求,需配置HTTP/1.1、透传Upgrade/Connection头、关闭缓冲、调大超时、透传真实IP与协议头,并确保后端路由匹配。

WebSocket 代理在 Nginx 中配置得当,完全可以支撑弹幕系统的后端转发需求。关键在于保持长连接、禁用缓冲、正确透传升级头,并确保后端服务(如 Node.js、Go 或 Java 的 WebSocket 服务)能识别真实客户端 IP 和协议。
启用 WebSocket 协议升级支持
Nginx 默认不主动处理 Upgrade 和 Connection 头,需显式透传,否则握手会失败(返回 400 或直接断连):
- 必须设置
proxy_http_version 1.1—— WebSocket 依赖 HTTP/1.1 的连接复用能力 - 添加
proxy_set_header Upgrade $http_upgrade,将客户端的Upgrade: websocket原样转发 - 添加
proxy_set_header Connection "upgrade",覆盖默认的close行为,触发协议升级
关闭缓冲与超时干扰
弹幕是实时流式消息,Nginx 若缓存响应或过早断连,会导致延迟、丢帧甚至连接中断:
- 设
proxy_buffering off,禁用响应体缓冲 - 调大超时:例如
proxy_read_timeout 86400(24 小时),避免空闲时被 Nginx 主动断开 - 可选:
proxy_send_timeout同样设为较大值,适应后端偶发响应延迟
透传客户端真实信息
后端服务常需获取用户 IP 或原始协议(如 wss://),用于限流、日志或生成安全 token:
- 加
proxy_set_header X-Real-IP $remote_addr和X-Forwarded-For $proxy_add_x_forwarded_for - 若前端走 HTTPS,加
proxy_set_header X-Forwarded-Proto $scheme,后端据此判断是否启用 WSS - 后端需信任该 Header(如 Express 中设
app.set('trust proxy', true))
完整 location 示例(支持 wss / ws)
假设弹幕服务运行在 localhost:8081,路径为 /danmaku:
location /danmaku {
proxy_pass http://127.0.0.1:8081;
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;
proxy_buffering off;
proxy_read_timeout 86400;
proxy_send_timeout 86400;
}
注意:确保后端 WebSocket 路由也匹配 /danmaku,且支持子协议(如 chat)时,Nginx 无需额外配置,自动透传 Sec-WebSocket-Protocol 头。










