Nginx實踐篇(5)- Nginx代理服務 - 代理緩衝區、代理從新定義請求頭、代理鏈接超時

1. 代理緩衝區

代理服務器能夠緩存一些響應數據,來減小I/O損耗,數據默認存儲在內存中,當內存不夠時,會存儲到硬盤上。

proxy_buffering

proxy_buffering這個參數用來控制是否打開後端響應內容的緩衝區,若是這個設置爲off,那麼proxy_buffers和proxy_busy_buffers_size這兩個指令將會失效。 可是不管proxy_buffering是否開啓,對proxy_buffer_size都是生效的。html

proxy_buffering開啓的狀況下,nignx會把後端返回的內容先放到緩衝區當中,而後再返回給客戶端(邊收邊傳,不是所有接收完再傳給客戶端)。 臨時文件由proxy_max_temp_file_size和proxy_temp_file_write_size這兩個指令決定的。nginx

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

注: proxy_buffering啓用時,要提防使用的代理緩衝區太大。這可能會吃掉你的內存,限制代理可以支持的最大併發鏈接數。緩存

Syntax:    proxy_buffering on | off;
Default:    proxy_buffering on;
Context:    http, server, location

proxy_buffer_size

後端服務器的響應頭會放到proxy_buffer_size當中,這個大小默認等於proxy_buffers當中的設置單個緩衝區的大小。 proxy_buffer_size只是響應頭的緩衝區,沒有必要也跟着設置太大。服務器

Syntax:    proxy_buffer_size size;
Default:    proxy_buffer_size 4k|8k;
Context:    http, server, location

proxy_buffers

proxy_buffers的緩衝區大小通常會設置的比較大,以應付大網頁。 proxy_buffers當中單個緩衝區的大小是由系統的內存頁面大小決定的,Linux系統中通常爲4k。 proxy_buffers由緩衝區數量和緩衝區大小組成的。總的大小爲number*size。併發

若某些請求的響應過大,則超過_buffers的部分將被緩衝到硬盤(緩衝目錄由_temp_path指令指定), 固然這將會使讀取響應的速度減慢, 影響用戶體驗. 可使用proxy_max_temp_file_size指令關閉磁盤緩衝.代理

Syntax:    proxy_buffers number size;
Default:    proxy_buffers 8 4k|8k;
Context:    http, server, location

proxy_busy_buffers_size

proxy_busy_buffers_size不是獨立的空間,他是proxy_buffers和proxy_buffer_size的一部分。nginx會在沒有徹底讀完後端響應的時候就開始向客戶端傳送數據,因此它會劃出一部分緩衝區來專門向客戶端傳送數據(這部分的大小是由proxy_busy_buffers_size來控制的,建議爲proxy_buffers中單個緩衝區大小的2倍),而後它繼續從後端取數據,緩衝區滿了以後就寫到磁盤的臨時文件中。code

Syntax:    proxy_busy_buffers_size size;
Default:    proxy_busy_buffers_size 8k|16k;
Context:    http, server, location

2. 從新定義或添加傳遞給代理服務器的請求頭

proxy_set_header

Syntax:    proxy_set_header field value;
Default:    
    proxy_set_header Host $proxy_host;
    proxy_set_header Connection close;
Context:    http, server, location

容許從新定義或添加傳遞給代理服務器的請求頭。value能夠包含文本、變量或者它們的組合。 當前配置級別中沒有定義proxy_set_header指令時,會從上一級別繼承配置。 默認狀況下,只有兩個請求頭會被從新定義:server

proxy_set_header Host $proxy_host;
proxy_set_header Connection close;

若是啓用緩存,來原始請求的請求頭 「If-Modified-Since」, 「If-Unmodified-Since」, 「If-None-Match」, 「If-Match」, 「Range」, 和 「If-Range」 將不會被代理服務器傳遞。htm

能夠經過下面的配置使請求頭 「Host」 不被代理服務器替換:

proxy_set_header Host $http_host;

3. 代理超時

proxy_connect_timeout

Syntax:    proxy_connect_timeout time;
Default:    proxy_connect_timeout 60s;
Context:    http, server, location

定義Nginx做爲代理,到後端服務器中間的鏈接超時時間,默認爲60秒。
應該注意的是,這個超時時一般不能超過75秒。

proxy_read_timeout

Syntax:    proxy_read_timeout time;
Default:    proxy_read_timeout 60s;
Context:    http, server, location

定義了從代理服務器讀取響應的超時時間,默認爲60秒。
超時只設置在兩個連續的讀取操做之間,而不是整個響應的傳輸。
若是代理服務器在這個時間內沒有傳輸任何數據,那麼鏈接就關閉了。

proxy_send_timeout

Syntax:    proxy_send_timeout time;
Default:    proxy_send_timeout 60s;
Context:    http, server, location

定義了將請求發送到代理服務器的超時時間,默認爲60秒。
超時只設置在兩個連續的寫操做之間,而不是整個請求的傳輸。
若是代理服務器在這個時間內沒有收到任何數據,那麼鏈接就關閉了。

4. 代理經常使用配置註解

location / {
    # 配置反向代理到本機的8080端口
    proxy_pass http://127.0.0.1:8080;

    # 配置請求客戶端真實的 Host 信息
    proxy_set_header Host $http_host;
    # 配置請求用戶真實的IP信息
    proxy_set_header X-Real-IP $remote_addr;

    # 鏈接超時時間爲30秒
    proxy_connect_timeout 30;
    # 讀取響應超時時間爲60秒
    proxy_send_timeout 60;
    # 發送請求超時時間爲60秒
    proxy_read_timeout 60;

    # 開啓代理緩衝區
    proxy_buffering on;
    # 響應頭的緩衝區設爲32k
    proxy_buffer_size 32k;
    # 網頁內容緩衝區個數爲4,單個大小爲128k
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    # 緩衝區臨時文件最大爲 256k
    proxy_max_temp_file_size 256k;

}
相關文章
相關標籤/搜索