SSE事件延迟半分钟到达客户端,请问Nginx代理需做哪些配置?
问题根因
你遇到的SSE事件延迟问题核心是Nginx默认启用了代理缓冲机制:对于后端返回的响应内容,Nginx会先写入缓冲区,等到缓冲区填满或者达到默认超时时间后,才会批量发送给客户端。SSE推送的单条事件体积通常远小于Nginx默认缓冲区大小,因此会被阻塞直到超时才推送,最终表现为几十秒的延迟。
需配置的Nginx规则
在Nginx配置中匹配SSE接口的location块内添加以下配置即可:
location /emitter/ { # 替换为你的Node.js后端服务地址 proxy_pass http://你的Node服务地址; # 核心配置:关闭代理缓冲,收到后端内容立刻转发给客户端 proxy_buffering off; # 使用HTTP 1.1协议,原生支持长连接 proxy_http_version 1.1; # 保留长连接设置,避免Nginx默认断开长连接 proxy_set_header Connection ""; # 调整读取超时,和你后端设置的2分钟连接超时对齐,避免无事件时Nginx主动断连 proxy_read_timeout 120s; # 常规请求头透传配置,可保留原有配置 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; }
额外补充检查项
- 可在后端SSE接口的响应头中新增
'X-Accel-Buffering': 'no',强制Nginx对该接口关闭缓冲,作为双重保险。 - 检查AWS负载均衡(ALB)的空闲超时配置:ALB默认空闲超时为60s,若超过60s无数据传输会主动断开连接,需要将该值调整到大于等于你设置的SSE最大连接时长(此处可调整为120s以上)。
内容的提问来源于stack exchange,提问作者franmcod
相关产品推荐
相关产品推荐

