Nginx 代理导致流式数据丢失的解决方案

Nginx 代理导致流式数据丢失的解决方案

在流式数据传输(如 SSE)中,Nginx 默认的缓冲机制可能会导致数据流式失效,所有数据被合并成一条再推送给前端。
关于SseEmitter流式传输内容参考博客:使用 SseEmitter 实现 Spring Boot 后端的流式传输


1. 问题描述

在本地测试时,我的流式数据传输是正常的:

  1. 后端使用 SseEmitter 持续推送数据。
  2. 前端 EventSource 逐步接收流式数据。

但当我把项目部署到服务器,并通过 Nginx 代理后,前端收到的数据变成了一次性推送,而不是流式返回。经过排查,发现是 Nginx 默认的缓存和缓冲机制 导致了这个问题。


2. 解决方案:修改 Nginx 配置

为了解决流式数据丢失的问题,我们需要在 Nginx 配置文件中进行调整,禁用缓存和缓冲机制

修改 nginx.conf 或你的站点配置
location /api/chat/ {
    proxy_pass http://127.0.0.1:8080;
    
    # 关闭 Nginx 代理缓存
    proxy_cache off;

    # 禁用缓冲,让数据即时发送
    proxy_buffering off;

    # 启用分块传输编码,确保流式数据正常推送
    chunked_transfer_encoding on;

    # 优化 TCP 传输
    tcp_nopush on;
    tcp_nodelay on;

    # 连接保持时间,避免过快关闭连接
    keepalive_timeout 300;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值