最近通过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请求