溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決Nginx Buffer機制引發(fā)的下載故障

發(fā)布時間:2021-10-14 14:52:03 來源:億速云 閱讀:196 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“如何解決Nginx Buffer機制引發(fā)的下載故障”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

Nginx Buffer 機制

在 Nginx 代理過程中,有兩種連接:

1.客戶端到 Nginx 的連接2.Nginx 到后端服務器的連接

這兩個連接的速度不一致,會對客戶端的體驗帶來不良的影響。Nginx 正是通過 Buffer 機制來緩解這個問題。

當啟用 buffer 時,Nginx 將會臨時存儲后端響應內(nèi)容在內(nèi)存或者磁盤上,然后慢慢把數(shù)據(jù)推送給客戶端;若關(guān)閉,則會按照響應內(nèi)容的多少立刻同步到客戶端。

假設客戶端的速度足夠快,那么完全可以把 buffer 關(guān)掉,讓數(shù)據(jù)盡可能快速到達;如果客戶端很慢,就應該保持 buffer 開啟,這樣有利于 Nginx 和后端的連接復用(本質(zhì)上是 HTTP 隊頭阻塞問題)。

大文件下載問題

Nginx Buffer 機制默認處于開啟狀態(tài),其會根據(jù) proxy_buffer_size 和 proxy_buffers 這兩個參數(shù)控制寫入內(nèi)存的大小。如果響應大于這個 buffer 大小,Nginx 會繼續(xù)通過 proxy_max_temp_file_size 參數(shù)將響應其余部分寫入到磁盤臨時文件。

那么問題來了,如果響應還是很大,超過了臨時文件的限額怎么辦?

等! 此時,Nginx 的 socket 緩沖區(qū)也是出于滿載狀態(tài)。由于客戶端很慢,Nginx 并沒有觸發(fā) read 后端操作。這里大概率會觸發(fā)后端服務器的 write 超時,進而由后端發(fā)起 close 操作。

這就是我遇到的問題:proxy_max_temp_file_size 默認為 1G,當客戶端的網(wǎng)絡比較慢時,臨時文件很快就被寫滿。這時候后端的響應還會繼續(xù)被接收到 socket 緩沖區(qū),直到緩沖區(qū)被打滿。此時,Nginx 所在服務器通過滑動窗口 zero 0 告知后端服務器停止發(fā)送數(shù)據(jù),直至觸發(fā)了后端的 write 超時。

如何解決Nginx Buffer機制引發(fā)的下載故障

而當客戶端的網(wǎng)絡比較快時,臨時文件并不會被寫滿,或者即使寫滿了也很快就會消費掉,不至于讓后端“阻塞”過長時間觸發(fā)超時。

如何解決?

1.調(diào)整 proxy_max_temp_file_size 大小?調(diào)大    讓臨時文件足夠可以緩沖整個響應?調(diào)小    讓整個鏈路上的數(shù)據(jù)流動起來,不要阻塞后端的 write 操作,進而觸發(fā)后端的超時2.關(guān)閉 Buffer     不推薦,會影響 Nginx 到后端的連接復用

“如何解決Nginx Buffer機制引發(fā)的下載故障”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI