背景

在使用 Django 框架实现 SSE 流式输出时,在本地运行正常,但在服务器上运行出现了流式返回丢失的问题,导致 AI 的返回是一次性的。

问题原因: proxy_buffering 配置问题。需要在 Nginx 配置中添加 proxy_buffering off;

proxy_buffering 详解

项目 描述
proxy_buffering 的含义 proxy_buffering 是 Nginx 中用于配置反向代理时的数据缓冲功能的指令
proxy_buffering 的作用 主要作用是在 Nginx 和后端服务器之间对数据进行缓冲,从而提高数据处理效率、减轻后端服务器负载、提升用户体验

工作原理

proxy_buffering 启用时:

  • Nginx 会将来自后端服务器的响应数据缓存在内存或磁盘文件中
  • 等数据完全接收后再转发给客户端
  • 这种机制能避免后端服务器过快地接收和发送数据,从而降低其负载

配置示例

nginx

server {
listen 80;
server_name your_domain.com;
# 针对 SSE 流式输出关闭缓冲
location /sse/ {
    proxy_pass http://backend_server;
    proxy_buffering off;      # 关闭代理缓冲
    proxy_cache off;          # 关闭缓存
    proxy_read_timeout 24h;   # 设置长连接超时时间

    # 设置必要的代理头
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# 其他普通请求可以保持缓冲开启
location / {
    proxy_pass http://backend_server;
    proxy_buffering on;       # 默认开启,提高普通请求性能
}

注意事项

  1. 性能影响:关闭缓冲会增加后端服务器压力,仅对需要实时流式传输的接口使用
  2. 适用场景:SSE、WebSocket、实时音视频流等需要即时传输的场景
  3. 配置生效:修改配置后需要重新加载 Nginx:nginx -s reload
  4. 测试验证:使用工具测试流式输出是否正常,确保数据实时传输
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐