解决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 不再对响应进行本地缓冲和预处理。

相关推荐
穿条秋裤到处跑7 小时前
前端连接websocket服务报错 Unexpected response code: 301
websocket·网络协议·nginx
YJQ99679 小时前
Nginx防盗链及HTTPS:保护网站内容安全与加密传输
nginx·安全·https
猿java12 小时前
什么是Nginx?它有哪些应用场景?
java·nginx·面试
绝顶少年12 小时前
反向代理、负载均衡与镜像流量:原理剖析、区别对比及 Nginx 配置实践
运维·nginx·负载均衡
天下·第二1 天前
【Nginx】负载均衡配置详解
运维·nginx·负载均衡
Hello.Reader1 天前
洞悉 NGINX ngx_http_access_module基于 IP 的访问控制实战指南
tcp/ip·nginx·http
JaneYork1 天前
vue前端SSE工具库|EventSource 替代方案推荐|PUSDN平行宇宙软件开发者网
sse·pusdn·流式请求·塔滋米·破该仔
PWRJOY1 天前
在 Ubuntu 24.04 系统上安装和管理 Nginx
linux·nginx·ubuntu
菠萝崽.2 天前
安装docker,在docker上安装mysql,docker上安装nginx
java·mysql·nginx·docker·软件工程·springboot·开发
java1234_小锋2 天前
什么是WebSocket?NGINX如何支持WebSocket协议?
websocket·网络协议·nginx