nginx 反向代理之 proxy_buffering


proxy_buffering主要是實現被代理服務器的數據和客戶端的請求異步。

為了方便理解,我們定義三個角色,A為客戶端,B為代理服務器,C為被代理服務器。

當proxy_buffering開啟,A發起請求到B,B再到C,C反饋的數據先到B的buffer上,然后B會根據proxy_busy_buffer_size來決定什么時候開始把數據傳輸給A。

在此過程中,如果所有的buffer被寫滿,數據將會寫入到temp_file中。

相反,如果proxy_buffering關閉,C反饋的數據實時地通過B傳輸給A。

 

以下配置,都是針對每一個http請求的:

1. proxy_buffering on;
該參數設置是否開啟proxy的buffer功能,參數的值為on或者off。
如果這個設置為off,那么proxy_buffers和proxy_busy_buffers_size這兩個指令將會失效。 
但是無論proxy_buffering是否開啟,proxy_buffer_size都是生效的

2. proxy_buffer_size 4k;
該參數用來設置一個特殊的buffer大小的。
從被代理服務器(C)上獲取到的第一部分響應數據內容到代理服務器(B)上,通常是header,就存到了這個buffer中。 
如果該參數設置太小,會出現502錯誤碼,這是因為這部分buffer不夠存儲header信息。建議設置為4k。

3. proxy_buffers  8 4k;
這個參數設置存儲被代理服務器上的數據所占用的buffer的個數和每個buffer的大小。
所有buffer的大小為這兩個數字的乘積。

4. proxy_busy_buffer_size 16k;
在所有的buffer里,我們需要規定一部分buffer把自己存的數據傳給A,這部分buffer就叫做busy_buffer。
proxy_busy_buffer_size參數用來設置處於busy狀態的buffer有多大。

對於B上buffer里的數據何時傳輸給A,我個人的理解是這樣的:
1)如果完整數據大小小於busy_buffer大小,當數據傳輸完成后,馬上傳給A;
2)如果完整數據大小不少於busy_buffer大小,則裝滿busy_buffer后,馬上傳給A;

5. proxy_temp_path
語法:proxy_temp_path  path [level1 level2 level3]
定義proxy的臨時文件存在目錄以及目錄的層級。

例:proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
其中/usr/local/nginx/proxy_temp為臨時文件所在目錄,1表示層級1的目錄名為1個數字(0-9),2表示層級2目錄名為2個數字(00-99)

6. proxy_max_temp_file_size
設置臨時文件的總大小,例如 proxy_max_temp_file_size 100M;

7. proxy_temp_file_wirte_size
設置同時寫入臨時文件的數據量的總大小。通常設置為8k或者16k。

 

配置示例:

server
{
    listen 80;
    server_name www.aminglinux.com;
 proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 2 4k; proxy_busy_buffers_size 4k; proxy_temp_path /tmp/nginx_proxy_tmp 1 2; proxy_max_temp_file_size 20M; proxy_temp_file_write_size 8k;
    
    location /
    {
        proxy_pass      http://192.168.10.110:8080/;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM