您好,登錄后才能下訂單哦!
本篇內容介紹了“如何解決Nginx Buffer機制引發的下載故障”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在 Nginx 代理過程中,有兩種連接:
1.客戶端到 Nginx 的連接2.Nginx 到后端服務器的連接
這兩個連接的速度不一致,會對客戶端的體驗帶來不良的影響。Nginx 正是通過 Buffer 機制來緩解這個問題。
當啟用 buffer 時,Nginx 將會臨時存儲后端響應內容在內存或者磁盤上,然后慢慢把數據推送給客戶端;若關閉,則會按照響應內容的多少立刻同步到客戶端。
假設客戶端的速度足夠快,那么完全可以把 buffer 關掉,讓數據盡可能快速到達;如果客戶端很慢,就應該保持 buffer 開啟,這樣有利于 Nginx 和后端的連接復用(本質上是 HTTP 隊頭阻塞問題)。
Nginx Buffer 機制默認處于開啟狀態,其會根據 proxy_buffer_size
和 proxy_buffers
這兩個參數控制寫入內存的大小。如果響應大于這個 buffer 大小,Nginx 會繼續通過 proxy_max_temp_file_size
參數將響應其余部分寫入到磁盤臨時文件。
那么問題來了,如果響應還是很大,超過了臨時文件的限額怎么辦?
等! 此時,Nginx 的 socket 緩沖區也是出于滿載狀態。由于客戶端很慢,Nginx 并沒有觸發 read
后端操作。這里大概率會觸發后端服務器的 write
超時,進而由后端發起 close
操作。
這就是我遇到的問題:proxy_max_temp_file_size
默認為 1G,當客戶端的網絡比較慢時,臨時文件很快就被寫滿。這時候后端的響應還會繼續被接收到 socket 緩沖區,直到緩沖區被打滿。此時,Nginx 所在服務器通過滑動窗口 zero 0 告知后端服務器停止發送數據,直至觸發了后端的 write
超時。
而當客戶端的網絡比較快時,臨時文件并不會被寫滿,或者即使寫滿了也很快就會消費掉,不至于讓后端“阻塞”過長時間觸發超時。
1.調整 proxy_max_temp_file_size
大小?調大 讓臨時文件足夠可以緩沖整個響應?調小 讓整個鏈路上的數據流動起來,不要阻塞后端的 write
操作,進而觸發后端的超時2.關閉 Buffer 不推薦,會影響 Nginx 到后端的連接復用
“如何解決Nginx Buffer機制引發的下載故障”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。