nginx 緩沖區設置 proxy_buffers
----
proxy_buffering on;
proxy_buffers 8 10M;
proxy_buffer_size 4k;
proxy_busy_buffers_size 20M;
----
1. proxy_buffering
語法:proxy_buffering on|off
默認值:proxy_buffering 0n
上下文:http,server,location
該 指令開啟從后端被代理服務器的響應內容緩沖。如果緩沖區開啟,nginx假定被代理的后端服務器會以最快速度響應,並把內容保存在由指令 proxy_buffer_size 和 proxy_buffers指定的緩沖區里邊.如果響應內容無法放在內存里邊,那么部分內容會被寫到磁盤上。如果緩沖區被關閉了,那么響應內容會按照獲取 內容的多少立刻同步傳送到客戶端。nginx不嘗試計算被代理服務器整個響應內容的大小,nginx能從服務器接受的最大數據,是由指令 proxy_buffer_size指定的.對於基於長輪詢(long-polling)的Comet 應用來說,關閉 proxy_buffering 是重要的,不然異步響應將被緩存導致Comet無法工作。
2. proxy_buffers
語法:proxy_buffers 數量 大小
默認值:proxy_buffers 8 4k/8k
上下文:http,server,location
該指令設置緩沖區的大小和數量,從被代理的后端服務器取得的響應內容,會放置到這里. 默認情況下,一個緩沖區的大小等於內存頁面大小,可能是4K也可能是8K,這取決於平台。
3. proxy_buffer_size
語法:proxy_buffer_size the size
默認值:proxy_buffer_size 4k/8k
上下文:http,server,location
該指令設置緩沖區大小,從代理后端服務器取得的第一部分的響應內容,會放到這里.小的響應header通常位於這部分響應內容里邊.默認來說,該緩沖區大小等於指令 proxy_buffers所設置的;但是,你可以把它設置得更小.
4. proxy_busy_buffers_size
語法:proxy_busy_buffers_size 大小
默認值:proxy_busy_buffers_size proxy_buffer_size*2
上下文:http,server,location,if
buffer 工作原理
1. 所有的proxy buffer參數是作用到每一個請求的。每一個請求會安按照參數的配置獲得自己的buffer。proxy buffer不是global而是per request的。
2. proxy_buffering 是為了開啟response buffering of the proxied server,開啟后proxy_buffers和proxy_busy_buffers_size參數才會起作用。
3. 無論proxy_buffering是否開啟,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所設置的buffer_size的作用是用來存儲upstream端response的header。
4. 在proxy_buffering 開啟的情況下,Nginx將會盡可能的讀取所有的upstream端傳輸的數據到buffer,直到proxy_buffers設置的所有buffer們 被寫滿或者數據被讀取完(EOF)。此時nginx開始向客戶端傳輸數據,會同時傳輸這一整串buffer們。同時如果response的內容很大的 話,Nginx會接收並把他們寫入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer 傳輸完了會從temp_file里面接着讀數據,直到傳輸完畢。
5. 一旦proxy_buffers設置的buffer被寫入,直到buffer里面的數據被完整的傳輸完(傳輸到客戶端),這個buffer將會一直處 在busy狀態,我們不能對這個buffer進行任何別的操作。所有處在busy狀態的buffer size加起來不能超過proxy_busy_buffers_size,所以proxy_busy_buffers_size是用來控制同時傳輸到客戶 端的buffer數量的。