2016年11月14日 星期一
電腦 nginx的http_slice_module功能
確認nginx 是否有包含aio功能
nginx -v
是否有 --with-http_slice_module
如果沒有,需重新編譯
設定nginx.conf
vi /etc/nginx/nginx.conf
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=cache:100m;
location / {
slice 1m;
proxy_cache cache;
proxy_cache_key $uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
proxy_cache_valid 200 206 1h;
#proxy_set_header Range $http_range;
proxy_pass http://127.0.0.1:8080;
}
嚐鮮:Nginx-1.9.8推出的切片模塊
首先,如果不帶Range 請求,後端大文件在本地cache 時,會按照配置的slice 大小進行切片存儲。
其次,如果帶Range 請求,則Nginx 會用合適的Range 大小(以slice 為邊界)去後端請求,這個大小跟客戶端請求的Range 可能不一樣,並將以slice 為大小的切片存儲到本地,並以正確的206響應客戶端。
注意上面所說的,Nginx 到後端的Range 並不一定等於客戶端請求的Range,因為無論你請求的Range 如何,Nginx 到後端總是以slice 大小為邊界,將客戶端請求分割成若干個子請求到後端,假設配置的slice 大小為1M,即1024字節,那麼如果客戶端請求Range 為0-1023範圍以內任何數字,均會落到第一個切片上,如果請求的Range 橫跨了幾個slice 大小,則nginx會向後端發起多個子請求,將這幾個slice 緩存下來。而對客戶端,均以客戶端請求的Range 為準。如果一個請求中,有一部分文件之前沒有緩存下來,則Nginx 只會去向後端請求缺失的那些切片。
由於這個模塊是建立在子請求的基礎上,會有這麼一個潛在問題:當文件很大或者slice 很小的時候,會按照slice 大小分成很多個子請求,而這些個子請求並不會馬上釋放自己的資源,可能會導致文件描述符耗盡等情況。
需要注意的點:
1.該模塊用在proxy_cache 大文件的場景,將大文件切片緩存
2.編譯時對configure 加上--with-http_slice_module 參數
3.$slice_range 一定要加到proxy_cache_key 中,並使用proxy_set_header 將其作為Range 頭傳遞給後端
4.要根據文件大小合理設置slice 大小
Nginx:作為緩存,支持Range回源
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。