最近通过springboot对接one-api实现类似于chatgpt的打字机效果,后端采用sse的方式,自己本地使用postman直接调用后端服务完全正常,但是部署到服务器上通过nginx就是一口气直接返回,最后查了下发现是需要在nginx上配置一下才支持流式返回,特此记录一下备忘。
什么是 SSE?
SSE 是一种让服务器能主动给浏览器发送数据的技术。通常,我们的网站都是浏览器去服务器请求数据,但有时候我们希望服务器能主动告诉浏览器一些新的信息,比如实时更新的股票价格、聊天消息等,这时候就用到了 SSE。
nginx配置支持sse
nginx直接新增如下配置:
代码语言:javascript
复制
# 设置 Nginx 不对 SSE 响应进行缓冲,直接透传给客户端
proxy_buffering off;
当然你还要配置连接超时等配置可以参考下面这份配置:
代码语言:javascript
复制
http { ...
server { ... location /sse { proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # SSE 连接时的超时时间 proxy_read_timeout 86400s; # 取消缓冲 proxy_buffering off; # 关闭代理缓存 proxy_cache off; # 禁用分块传输编码 #chunked_transfer_encoding off # 反向代理到 SSE 应用的地址和端口 proxy_pass http://backend-server; } ... } ...
}
参考链接
nginx 转发Tcp、WebSocket、SSE配置
大模型流式输出 sse实现时,如何配置nginx
使用Nginx配置反向代理处理SSE请求