最近準(zhǔn)備用nginx搭建了一個(gè)圖片服務(wù)器,看中的就是nginx超強(qiáng)的靜態(tài)文件處理能力。
由于圖片量比較大,和web服務(wù)器(也是nginx)分開運(yùn)行,雖然web服務(wù)器調(diào)用圖片沒用問題,但畢竟是遠(yuǎn)程調(diào)用,肯定沒有本地文件系統(tǒng)那么快,因此仍然有優(yōu)化的空間。
proxy_store
使用前的nginx配置
location ~* ^.+/.(js|ico|gif|jpg|jpeg|png|html|htm)$ { log_not_found off; access_log off; expires 7d;}
接下來就用到了nginx的proxy_store模塊,讓nginx 將取得的圖片緩存在本地一個(gè)目錄,下次就直接調(diào)用,(這讓網(wǎng)頁熱點(diǎn)圖片統(tǒng)計(jì)變得非常容易,討厭日志分析的管理員肯定喜歡)
location ~ .*/.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ { log_not_found off; expires 7d ; access_log off; proxy_store on; proxy_store_access user:rw group:rw all:rw; if ( !-e $request_filename) { proxy_pass http://img.example.com }}
默認(rèn)的緩存路徑位于 /var/cache/nginx/proxy_temp,里面將會(huì)保持圖片服務(wù)器的目錄結(jié)構(gòu)
proxy_store 沒有緩存過期,相當(dāng)于鏡像功能,這既是優(yōu)點(diǎn)也是缺點(diǎn),優(yōu)點(diǎn)是訪問快速,缺點(diǎn)是不知哪一天,硬盤會(huì)被撐爆,不過我們可以寫個(gè)find腳本,定時(shí)清理一下緩存就OK了。
nginx還有一種緩存proxy_cache,它在設(shè)計(jì)上比proxy_store 更先進(jìn),采用內(nèi)存+硬盤方式緩存,可以設(shè)置緩存大小和緩存過期。
proxy_cache
proxy_cache有一個(gè)問題就是,proxy_cache不能清除指定的URL緩存,只能設(shè)置URL過期時(shí)間,但是有問題,有人就會(huì)很快解決問題,nginx第三方模塊ngx_cache_purge能清除指定URL。
nginx安裝時(shí)需要將ngx_cache_purege加載進(jìn)去。
./configure --user=www --group=www --add-module=/root/dxm/nginx/ngx_cache_purge-1.2
其中,/root/dxm/nginx/ngx_cache_purge-1.2為ngx_cache_purge解壓路徑(附件中提供ngx_cache_purge tar包下載)
現(xiàn)在來一段實(shí)例,實(shí)現(xiàn)圖片緩存:
話說proxy_tem_path,與proxy_cache_path必須在同一個(gè)分區(qū)之下!
proxy_temp_path /usr/local/nginx/proxy_temp; proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g; upstream tomcat_server{ server 127.0.0.1:8080; } server{ listen 192.168.154.128; server_name www.wolf.com; location ~ .*/.(gif|jpg|jpeg|png|bmp|swf)$ { proxy_cache cache_one; proxy_cache_methods GET HEAD POST; proxy_cache_min_uses 1; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m; proxy_cache_key "$host:$server_port$uri$is_args$args"; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://tomcat_server; } location ~ .*/.(jsp)$ { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://tomcat_server; } location ~ /purge(/.*) { allow 192.168.154.128; allow 192.168.154.1; deny all; proxy_cache_purge cache_one $host:$server_port$1$is_args$args; }
恩,靜態(tài)頁面緩存,動(dòng)態(tài)請(qǐng)求不緩存!
大家看一下最后一段的那個(gè)purege配置,很顯然,表示哪些IP可以手動(dòng)清除指定的URL
比如,www.survivalescaperooms.com/1.jpg可以訪問到我的圖片,那么用www.wolfdream.cn/purge/1.jpg 就可以清除圖片緩存了。