记录一次在实现SSE流式返回丢失的问题
·
背景
在使用 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; # 默认开启,提高普通请求性能
}
注意事项
- 性能影响:关闭缓冲会增加后端服务器压力,仅对需要实时流式传输的接口使用
- 适用场景:SSE、WebSocket、实时音视频流等需要即时传输的场景
- 配置生效:修改配置后需要重新加载 Nginx:
nginx -s reload - 测试验证:使用工具测试流式输出是否正常,确保数据实时传输
更多推荐
所有评论(0)