Nginx proxy buffer設計原理
一、緩沖功能概述
1、數據暫存
Nginx 的 proxy buffer 主要用于在代理請求時,對從后端服務器(upstream server)獲取的數據進行暫存。這一功能有助于平滑網絡波動帶來的影響。例如,當后端服務器響應速度較快,但客戶端網絡狀況不佳時,緩沖區可以先存儲數據,然后按照客戶端能夠接受的速度發送數據。
對于異步的網絡交互場景,緩沖區提供了一個臨時的數據存儲位置。在代理過程中,Nginx 可以先將后端服務器的響應數據接收并存儲在緩沖區中,同時繼續處理其他請求或者進行一些預處理操作,如數據的解壓、解密等。
2、流量控制
它可以對上下游的數據流量進行控制。對于后端服務器而言,Nginx 的 proxy buffer 可以避免因客戶端接收速度過慢而導致后端服務器連接被長時間占用的情況。當客戶端接收能力有限時,Nginx 可以從緩沖區中按照客戶端的接收能力逐步發送數據,而后端服務器可以繼續處理其他請求。
從客戶端的角度看,Nginx 可以通過緩沖區來限制數據的發送速率,防止大量數據瞬間涌向客戶端而造成客戶端的接收壓力過大,例如,通過設置合適的緩沖區大小和發送速率限制,確保客戶端能夠穩定地接收數據。
二、proxy buffer 配置講解
|
指令 |
值 |
詳情 |
|
proxy_buffering |
on | off |
是否啟用Proxy Buffer功能,默認為on(開啟狀態) |
|
proxy_buffers |
number size |
接收一次被代理服務器響應數據的Proxy Buffer個數和每個Buffer的大小。number=Proxy Bufferr的個數,size=每個Buffer的大小,如:proxy_buffers 8 4k |
|
proxy_buffer_size |
size |
從被代理服務器獲取的第一部分響應數據的大小,該數據中一般包含了HTTP響應頭,Nginx服務器通過它來獲取響應數據和被代理服務器的一些必要的信息。size=緩存大小,如:proxy_buffer_size 8k; |
|
proxy_busy_buffers_size |
size |
當啟用來自代理服務器的響應緩沖時,會限制在響應尚未完全讀取時可能忙于向客戶端發送響應的緩沖區的總大小。與此同時,其余的緩沖區可用于讀取響應,并在需要時將部分響應緩沖到臨時文件中。默認情況下,大小受proxy_buffer_size和proxy_bBuffers指令設置的兩個緩沖區的大小限制。 |
|
proxy_temp_path |
path [level1 [level2 [level3]]] |
配置磁盤上的一個文件路徑,該文件用于臨時存放代理服務器的大體積響應數據,path=磁盤上存放臨時文件的路徑,levelN=在path變量設置的路徑下第幾級hash目錄中存放臨時文件,如:proxy_temp_path /tmp/nginx/proxy_temp 1 2,臨時文件路徑是/tmp/nginx/proxy_temp/1/10/00000100101 |
|
proxy_max_temp_file_size |
size |
用于配置所有臨時文件的總體積大小,存放在磁盤上的臨時文件大小不能超過該配置值。size=設置臨時文件總體積的上限,默認為1024MB |
|
proxy_temp_file_write_size |
size |
用于配置同時寫入臨時文件的數據量的總大小,合理設置可以避免磁盤IO負載過重,size=同時寫入臨時文件的數據量總大小 |
|
語法: |
proxy_buffering on | off; |
|
默認值: |
proxy_buffering on; |
|
上下文: |
http, server, location |
啟用或禁用來自代理服務器的響應緩沖。啟用緩沖后,nginx會盡快從代理服務器接收響應,并將其保存到proxy_buffer_size和proxy_bBuffers指令設置的緩沖區中。如果整個響應不適合內存,可以將其一部分保存到磁盤上的臨時文件中。寫入臨時文件由proxy_max_temp_file_size和proxy_temp_file_write_size指令控制。當緩沖被禁用時,響應會在收到后立即同步傳遞給客戶端。nginx不會嘗試從代理服務器讀取整個響應。nginx一次可以從服務器接收的最大數據大小由proxy_buffer_size指令設置。