關於nginx反向代理傳輸機制的總結

1) proxy_buffering這個參數用來控制是否打開後端響應內容的緩衝區,如果這個設置爲off,那麼proxy_buffers和proxy_busy_buffers_size這兩個指令將會失效。

但是無論proxy_buffering是否開啓,對proxy_buffer_size都是生效的。


2) proxy_buffering開啓的情況下,nignx會把後端返回的內容先放到緩衝區當中,然後再返回給客戶端(邊收邊傳,不是全部接收完再傳給客戶端)。

臨時文件由proxy_max_temp_file_size和proxy_temp_file_write_size這兩個指令決定的。


如果proxy_buffering關閉,那麼nginx會立即把從後端收到的響應內容傳送給客戶端,每次取的大小爲proxy_buffer_size的大小,這樣效率肯定會比較低。


3) 後端服務器的相應頭會放到proxy_buffer_size當中,這個大小默認等於proxy_buffers當中的設置單個緩衝區的大小。

而proxy_buffers當中單個緩衝區的大小是由系統的內存頁面大小決定的,Linux系統中一般爲4k。

查看方法:

# getconf PAGE_SIZE

4096


雖然默認是相等的,但是proxy_buffers的緩衝區大小一般會設置的比較大,以應付大網頁。而proxy_buffer_size只是響應頭的緩衝區,沒有必要也跟着

擴展到那麼大。所以proxy_buffer_size最好單獨設置,一般設置個4k就夠了。



4) proxy_buffers是有緩衝區數量和緩衝區大小組成的。總的大小爲number*size。

proxy_busy_buffers_size不是獨立的空間,他是proxy_buffers和proxy_buffer_size的一部分。nginx會在沒有完全讀完後端響應的時候就開始向客戶端傳送數據,

所以它會劃出一部分緩衝區來專門想客戶端傳送數據(這部分的大小是由proxy_busy_buffers_size來控制的,建議爲proxy_buffers中單個緩衝區大小的2倍),然後它繼續從後端取數據,緩衝區滿了之後就

寫到磁盤的臨時文件中。


5) 臨時文件由proxy_max_temp_file_size和proxy_temp_file_write_size這兩個指令決定。

proxy_max_temp_file_size是臨時文件的總大小,默認1024m。

proxy_temp_file_write_size是一次訪問能寫入的臨時文件的大小,默認是proxy_buffer_size和proxy_buffers中設置的緩衝區大小的2倍,Linux下一般是8k。


參考文檔:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章