流式返回(SSE、chunked 响应)NGINX配置
文章类型:其他
发布者:hp
发布时间:2025-11-19
在使用流式返回数据时,本地调试是正常的,但是一上线,只获取到最后的一条数据,没有全部获取到,那么什么原因呢
要让 Nginx 在 /common 上游代理流式响应(SSE、chunked、流式 JSON 等)时稳定输出,需要重点处理两块:保持长连接 & 禁止缓冲。否则数据会被攒成一大块最后才发出去,或者连接被提前断开
location /common {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}proxy_http_version 1.1:默认是 1.0,会在响应末尾才发送;1.1 支持 chunked 传输和长连接。
proxy_set_header Connection "":避免向上游发送 Connection: close,保证 SSE/流式请求不断开;如果你明确要 keep-alive 也可以写成 proxy_set_header Connection keep-alive;。
proxy_buffering off:最关键!关闭代理缓冲,否则 Nginx 会把上游流式内容缓存后一次性回放,流式就没意义了。
proxy_cache off / proxy_buffer_size:保证不被 cache。通常关闭缓存即可;如需进一步控制可设置 proxy_buffer_size 4k; proxy_busy_buffers_size 8k; 等。
proxy_read_timeout 3600s:默认 60s,流式响应常常会挂几十分钟,需要调大,否则 60 秒内没有数据到达就会被 Nginx 断开。
proxy_send_timeout:可按需调大(比如 600s)以防止客户端发送慢被中断
暂无评论,快来发表第一条评论吧~