解决SSE流被Nginx缓存的问题
作者:路比船长
如果你的服务使用了nginx网关,可能会出现nginx缓冲sse流的问题,导致的现象是,客户端调用sse接口时,流数据并不是一条条出现的,而是一口气出现的,本文将给大家介绍如何解决SSE流被Nginx缓存的问题,需要的朋友可以参考下
问题
如果你的服务使用了nginx网关,可能会出现nginx缓冲sse流的问题,导致的现象是,客户端调用sse接口时,流数据并不是一条条出现的,而是一口气出现的,原因就是nginx网关对流数据进行了缓存。
单个Nginx的情况
如果你的客户端和服务器之间只存在一层nginx网关,可以通过在接口添加X-Accel-Buffering=no的响应header,来告诉nginx不要对响应数据进行缓存。
多个Nginx的情况
但很多时候我们所在的服务环境可能不止一个nginx网关。拿我们的服务为例子,因为某些历史遗留原因,客户端到服务端实际上存在两个nginx网关,一个是公司层面的网关,一个是用于k8s反向代理的网关,这个时候单纯设置X-Accel-Buffering=no就无效了。
原因是响应数据首先到达第一个nginx,此时这个nginx会消耗掉这个header,然后将数据透传到下一个nginx,此时第二个nginx由于默认会缓存数据,所以sse流就再一次被缓存了。
解决办法是在第一个nginx的配置里面,继续加上这个header,表示这个路径下的请求需要带上这个header,这样第二个nginx才能继续收到这个header并且不缓存数据。
location /path { ... add_header X-Accel-Buffering "no"; ... }
客户端与服务器之间有n个nginx,就要至少在n-1个nginx里面配置好这个header。
到此这篇关于解决SSE流被Nginx缓存的问题的文章就介绍到这了,更多相关SSE流被Nginx缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!