解決SSE流被Nginx緩存的問題
問題
如果你的服務(wù)使用了nginx網(wǎng)關(guān),可能會(huì)出現(xiàn)nginx緩沖sse流的問題,導(dǎo)致的現(xiàn)象是,客戶端調(diào)用sse接口時(shí),流數(shù)據(jù)并不是一條條出現(xiàn)的,而是一口氣出現(xiàn)的,原因就是nginx網(wǎng)關(guān)對(duì)流數(shù)據(jù)進(jìn)行了緩存。
單個(gè)Nginx的情況
如果你的客戶端和服務(wù)器之間只存在一層nginx網(wǎng)關(guān),可以通過在接口添加X-Accel-Buffering=no的響應(yīng)header,來告訴nginx不要對(duì)響應(yīng)數(shù)據(jù)進(jìn)行緩存。
多個(gè)Nginx的情況
但很多時(shí)候我們所在的服務(wù)環(huán)境可能不止一個(gè)nginx網(wǎng)關(guān)。拿我們的服務(wù)為例子,因?yàn)槟承v史遺留原因,客戶端到服務(wù)端實(shí)際上存在兩個(gè)nginx網(wǎng)關(guān),一個(gè)是公司層面的網(wǎng)關(guān),一個(gè)是用于k8s反向代理的網(wǎng)關(guān),這個(gè)時(shí)候單純?cè)O(shè)置X-Accel-Buffering=no就無效了。
原因是響應(yīng)數(shù)據(jù)首先到達(dá)第一個(gè)nginx,此時(shí)這個(gè)nginx會(huì)消耗掉這個(gè)header,然后將數(shù)據(jù)透?jìng)鞯较乱粋€(gè)nginx,此時(shí)第二個(gè)nginx由于默認(rèn)會(huì)緩存數(shù)據(jù),所以sse流就再一次被緩存了。
解決辦法是在第一個(gè)nginx的配置里面,繼續(xù)加上這個(gè)header,表示這個(gè)路徑下的請(qǐng)求需要帶上這個(gè)header,這樣第二個(gè)nginx才能繼續(xù)收到這個(gè)header并且不緩存數(shù)據(jù)。
location /path {
...
add_header X-Accel-Buffering "no";
...
}客戶端與服務(wù)器之間有n個(gè)nginx,就要至少在n-1個(gè)nginx里面配置好這個(gè)header。
到此這篇關(guān)于解決SSE流被Nginx緩存的問題的文章就介紹到這了,更多相關(guān)SSE流被Nginx緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx請(qǐng)求轉(zhuǎn)發(fā)配置指南
Nginx 是一款高性能的 HTTP 和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器,本文檔將介紹如何使用 Nginx 配置請(qǐng)求轉(zhuǎn)發(fā),并解釋一些常用的配置參數(shù),需要的朋友可以參考下2024-10-10
Nginx使用Lua模塊實(shí)現(xiàn)WAF的原理解析
waf是通過執(zhí)行一系列針對(duì)HTTP/HTTPS的安全策略來專門為Web應(yīng)用提供保護(hù)的一款產(chǎn)品,本文重點(diǎn)給大家介紹Nginx使用Lua模塊實(shí)現(xiàn)WAF的原理,需要的朋友參考下吧2021-09-09
Forever+nginx部署Node站點(diǎn)的方法示例
這篇文章主要介紹了Forever+nginx部署Node站點(diǎn)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問
這篇文章主要介紹了nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06

