解决nginx代理SSE接口的响应没有流式返回

目录

现象

前后端分离的项目,前端访问被nginx反向代理的后端SSE接口,预期是流式返回,但经常是很久不响应,一响应全部结果一下子都返回了。查看后端项目的日志,响应其实是流式产生的。推测是nginx配置问题

原来的nginx配置

bash 复制代码
server {
  listen 5909;
  listen [::]:5909;
  server_name localhost;

 location /multi-aiDemo2/ {
    proxy_pass http://。。。。;
   proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
    proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
  client_max_body_size 20m;
  }


   location / {
    alias /home/wlsj/aiFront/aiDemo2/;
     index index.html;
  }

}

解决

亲测使用proxy_http_version 1.1 或者 proxy_buffering off 都可以。我最后使用的是proxy_buffering off ,因为感觉它更贴合我的目的:

相关文档解释:
https://stackoverflow.com/a/13673298
https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive

it is necessary to enable keepalive connections to upstream servers. The proxy_http_version directive should be set to "1.1" and the "Connection" header field should be cleared

文心一言对proxy_buffering off的解释:

启用与禁用代理缓冲
启用(默认行为):当 proxy_buffering 设置为 on(或者没有明确设置,因为 on 是默认值)时,Nginx 会将来自上游服务器的响应内容缓存在本地内存中,直到整个响应体被接收完毕或者达到了 proxy_buffers 和 proxy_buffer_size 指令所指定的缓冲区大小限制。这样做的好处是可以减少与上游服务器的交互次数,提高响应速度,并允许 Nginx 对响应内容进行一些处理(如 gzip 压缩)后再发送给客户端。

禁用(proxy_buffering off;):当设置为 off 时,Nginx 会将来自上游服务器的响应内容直接发送给客户端,而不会进行本地缓存。这意味着客户端会更快地开始接收数据,特别是对于那些需要快速开始接收响应首部的场景(如流媒体或实时数据服务)很有用。但是,这也可能导致客户端的响应时间更加依赖于上游服务器的响应速度和稳定性,因为 Nginx 不再对响应进行本地缓冲和预处理。

相关推荐
群联云防护小杜1 小时前
服务器异常磁盘写排查手册 · 已删除文件句柄篇
运维·服务器·nginx·开源·lua
川石课堂软件测试12 小时前
Oracle 数据库:视图与索引
数据库·网络协议·nginx·http·oracle·grafana·prometheus
小妖66613 小时前
mac 安装 nginx
运维·nginx·macos
Whitess00713 小时前
Websocket链接如何配置nginx转发规则?
websocket·网络协议·nginx
if时光重来1 天前
springboot项目使用websocket功能,使用了nginx反向代理后连接失败问题解决
spring boot·websocket·nginx
xiaozhenghahaha1 天前
Web相关知识(草稿)
运维·nginx
柯南二号1 天前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
工会代表1 天前
nginx配置,将前端项目配置到子路径下踩过的坑。
前端·nginx
云霄IT1 天前
CentOS7安装Nginx服务——为你的网站配置https协议和自定义服务端口
服务器·nginx·https
XMYX-01 天前
Tengine/Nginx 安装以及模块查看与扩展
运维·nginx