Nginx 作为SSE的反向代理时,最关键的是关闭代理响应缓冲(proxy_buffering off),否则Nginx 会将后端推送的消息缓存到缓冲区达到一定大小后才转发给客户端,严重破坏实时性。完整的关键配置包括:proxy_buffering off;、proxy_cache off;、gzip off;(禁用压缩,压缩会破坏SSE 流的实时解析)、proxy_read_timeout 3600s;(设置足够大的读取超时,避免空闲连接被Nginx主动断开)、proxy_http_version 1.1;、proxy_set_header Connection "";(确保使用HTTP/1.1长连接)。
Apache 作为SSE反向代理时,需启用mod_proxy和mod_proxy_http模块,并在配置中设置ProxyPass的超时参数:ProxyPass /events http://backend:3000/events connectiontimeout=3600(设置足够大的连接超时)。同时需关闭mod_deflate压缩模块对SSE路径的压缩,并确保EventSource请求不经过任何会缓存响应的中间件。
部分CDN 服务会在边缘节点缓存HTTP响应,而SSE端点返回的是无限长的text/event-stream流,不应被CDN缓存。需确保SSE端点的HTTP响应头中包含Cache-Control: no-cache, no-store, must-revalidate,并告知CDN不要缓存该路径的响应。腾讯云CDN支持基于URL路径的缓存规则配置,可将SSE端点路径(如/api/stream、/events)设置为不缓存。
在"客户端 → CDN → 负载均衡器(如腾讯云CLB)→ Nginx → 应用服务器"的多层代理架构中,任何一层未正确关闭缓冲或设置了过短的超时,都会导致SSE流中断或延迟。排查方法:使用curl -N(禁用缓冲)直接访问应用服务器SSE端口,观察消息是否实时到达;然后逐层向前,在每一层代理后使用curl测试,定位哪一层引入了延迟或断开问题。