1. 为什么需要Nginx反向代理SSE长连接?
SSE(Server-Sent Events)技术在现代Web应用中越来越常见,特别是在需要实时数据推送的场景,比如股票行情、实时监控、在线聊天等。但直接暴露后端服务给客户端会面临几个问题:首先是安全性,后端服务通常需要隐藏真实IP;其次是性能,单个服务器难以应对高并发连接;最后是灵活性,直接连接后端难以实现负载均衡和故障转移。
Nginx作为反向代理恰好能解决这些问题。我曾在某金融数据平台项目中,用Nginx处理过每秒上万次的SSE连接请求。实测发现,未经优化的默认配置会导致约15%的连接异常中断,而经过调优后稳定性提升到99.9%以上。这就是为什么我们需要专门研究Nginx对SSE长连接的代理优化。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SSE长连接的核心配置参数
2.1 超时设置:让连接保持足够长的时间
Nginx默认的超时设置对SSE很不友好。比如proxy_read_timeout默认只有60秒,这意味着如果60秒内没有数据传输,Nginx就会主动断开连接。对于SSE这种可能需要保持几小时甚至几天的长连接,必须调整这个参数。
nginx复制location /sse {
proxy_read_timeout 86400s; # 24小时超时
proxy_send_timeout 86400s;
keepalive_timeout 86400s;
}
但要注意,设置过长的超时也会占用服务器资源。我的经验是:对于金融行情类应用,建议设置12小时(43200s);对于在线通知类应用,4小时(14400s)通常足够。同时要在后端服务实现心跳机制,定期发送注释行(以冒号开头的行)保持连接活跃。
2.2 缓冲与缓存:实时性的关键
SSE的核心价值就在于实时性,但Nginx默认会启用缓冲和缓存,这会导致数据延迟甚至重复。我在早期项目中就踩过这个坑——用户收到的行情数据总是延迟2-3秒,就是因为没关闭缓冲。
必须关闭的配置项:
nginx复制proxy_buffering off; # 立即转发数据,不缓冲
proxy_cache off; # 禁用缓存,避免重复数据
还有个隐藏参数需要注意:
nginx复制proxy_request_
