淺談Nginx代理緩存配置
淺談Nginx代理緩存配置前言 nginx最常見的應(yīng)用場景就是作為反向代理服務(wù)器使用,那必然要使用代理功能,為了提高性能,代理緩存也是必不可少的一項配置。實踐發(fā)現(xiàn),Nginx的限速也是基于緩存的。 代理緩存之proxy_buffering proxy_buffering可以是on
淺談Nginx代理緩存配置前言 nginx最常見的應(yīng)用場景就是作為反向代理服務(wù)器使用,那必然要使用代理功能,為了提高性能,代理緩存也是必不可少的一項配置。實踐發(fā)現(xiàn),Nginx的限速也是基于緩存的。 代理緩存之proxy_buffering proxy_buffering可以是on
nginx最常見的應(yīng)用場景就是作為反向代理服務(wù)器使用,那必然要使用代理功能,為了提高性能,代理緩存也是必不可少的一項配置。實踐發(fā)現(xiàn),Nginx的限速也是基于緩存的。
proxy_buffering可以是on也可以是off,當(dāng)開啟時,代理服務(wù)器將啟用緩存功能,包括硬盤緩存和內(nèi)存緩存,當(dāng)buffer滿時將會使用磁盤作為緩存,和其配套使用的參數(shù)介紹如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 1. proxy_buffering??on; # 該參數(shù)設(shè)置是否開啟proxy的buffer功能,參數(shù)的值為on或者off。 # 如果這個設(shè)置為off,那么proxy_buffers和proxy_busy_buffers_size這兩個指令將會失效。 # 但是無論proxy_buffering是否開啟,proxy_buffer_size都是生效的 2. proxy_buffer_size??4k; # 該參數(shù)用來設(shè)置一個特殊的buffer大小的。 # 從被代理服務(wù)器(C)上獲取到的第一部分響應(yīng)數(shù)據(jù)內(nèi)容到代理服務(wù)器(B)上,通常是header,就存到了這個buffer中。 # 如果該參數(shù)設(shè)置太小,會出現(xiàn)502錯誤碼,這是因為這部分buffer不夠存儲header信息。建議設(shè)置為4k。 3. proxy_buffers??8??4k; # 這個參數(shù)設(shè)置存儲被代理服務(wù)器上的數(shù)據(jù)所占用的buffer的個數(shù)和每個buffer的大小。 # 所有buffer的大小為這兩個數(shù)字的乘積。 4. proxy_busy_buffer_size 16k; # 在所有的buffer里,我們需要規(guī)定一部分buffer把自己存的數(shù)據(jù)傳給A,這部分buffer就叫做busy_buffer。 # proxy_busy_buffer_size參數(shù)用來設(shè)置處于busy狀態(tài)的buffer有多大。 # 對于B上buffer里的數(shù)據(jù)何時傳輸給A,我個人的理解是這樣的: # 1)如果完整數(shù)據(jù)大小小于busy_buffer大小,當(dāng)數(shù)據(jù)傳輸完成后,馬上傳給A; # 2)如果完整數(shù)據(jù)大小不少于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個數(shù)字(0-9),2表示層級2目錄名為 # 2個數(shù)字(00-99) 6. proxy_max_temp_file_size # 設(shè)置臨時文件的總大小,例如 proxy_max_temp_file_size 100M; 7. proxy_temp_file_wirte_size # 設(shè)置同時寫入臨時文件的數(shù)據(jù)量的總大小。通常設(shè)置為8k或者16k。 |
這里其實沒有什么好說得,但是有一個點要注意,代理產(chǎn)生的臨時文件不會自刪除,如果這里將代理作為下載服務(wù),那可能產(chǎn)生大量的臨時文件,最終導(dǎo)致磁盤寫滿。
接上面的問題,如果要將Nginx作為下載服務(wù)的代理機(jī)器時怎么操作,這里有兩個選項:
不需要使用一些依賴緩存的功能時完全可以不適用代理緩存功能,proxy_buffering設(shè)置為off即可,但是如果想使用一些高級功能,比如下載限時速,是依賴proxy_buffering的,這里就要采用第二種方案,proxy_buffering搭配proxy_cache_path一期使用。
proxy_cache_path會對訪問過的內(nèi)容在本地建立副本,當(dāng)再次訪問時不必請求源服務(wù)器就可以返回數(shù)據(jù),同時支持本地副本的過過期時間配置
proxy_cache_path需要在http模塊配置,下面是一個例子:
1 | proxy_cache_path /tmp/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=2m max_size=800m; |
下面是參數(shù)介紹
1 2 3 4 5 6 7 | /tmp/nginx_cache/??#本地路徑,用來設(shè)置Nginx緩存資源的存放地址 levels??????????#默認(rèn)所有緩存文件都放在同一個/tmp/nginx_cache/下,但是會影響緩存的性能,因此通常會在/tmp/nginx_cache/下面建立子目錄用來分別存放不同的文件。假設(shè)levels=1:2,Nginx為將要緩存的資源生成的key為f4cd0fbc769e94925ec5540b6a4136d0,那么key的最后一位0,以及倒數(shù)第2-3位6d作為兩級的子目錄,也就是該資源最終會被緩存到/tmp/nginx_cache/0/6d目錄中 key_zone????????#在共享內(nèi)存中設(shè)置一塊存儲區(qū)域來存放緩存的key和metadata(類似使用次數(shù)),這樣nginx可以快速判斷一個request是否命中或者未命中緩存,1m可以存儲8000個key,10m可以存儲80000個key max_size????????#最大cache空間,如果不指定,會使用掉所有disk space,當(dāng)達(dá)到配額后,會刪除最少使用的cache文件 inactive????????#未被訪問文件在緩存中保留時間,本配置中如果60分鐘未被訪問則不論狀態(tài)是否為expired,緩存控制程序會刪掉文件。inactive默認(rèn)是10分鐘。需要注意的是,inactive和expired配置項的含義是不同的,expired只是緩存過期,但不會被刪除,inactive是刪除指定時間內(nèi)未被訪問的緩存文件 use_temp_path?? #如果為off,則nginx會將緩存文件直接寫入指定的cache文件中,而不是使用temp_path存儲,official建議為off,避免文件在不同文件系統(tǒng)中不必要的拷貝 proxy_cache???? #啟用proxy cache,并指定key_zone。另外,如果proxy_cache off表示關(guān)閉掉緩存。 |
使用keys_zone是在server塊內(nèi)部,比如
1 2 3 4 5 6 7 8 9 | server { ????... ????proxy_buffering on; ????location / { ????????proxy_cache my_zone; ????????proxy_pass http://my_upstream; ????} } |
版權(quán)所有:深圳市網(wǎng)商在線科技有限公司
友情鏈接: