nginx配置image_filter生成縮略圖

最近有個(gè)需求,客戶端向服務(wù)器請(qǐng)求圖片時(shí),可以帶get參數(shù)請(qǐng)求想要的縮略圖,例如http://www.xxxxx.com/Upload/img//1de23275134663.jpg?size=100x100;

剛開(kāi)始想法是用php的圖片類來(lái)處理,在客服端請(qǐng)求圖片時(shí),nginx上用正則判斷url是否請(qǐng)求縮略圖的形式,如果是則rewrite到接口去處理生成縮略圖;

后來(lái)在谷歌看了一些相關(guān)文檔后,其實(shí)可以用nginx的的 image_filter模塊來(lái)處理;如果nginx上沒(méi)有安裝該模塊的,可以谷歌看下攻略進(jìn)行安裝。

首先要做的是用正則去匹配url為圖片請(qǐng)求的并帶有縮略圖參數(shù)的才能走進(jìn)區(qū)間。

第一個(gè)注意的是由于location只匹配URI,不可以匹配get參數(shù),所以?號(hào)就不能匹配了,就把?換成!,這樣才能精準(zhǔn)的去匹配,也就是客戶端請(qǐng)求的url要為:

http://www.xxxxx.com/Upload/img//1de23275134663.jpg!size=100x100;

第二個(gè)注意的是Nginx不支持在if {}這個(gè) block 里面用image_filter函數(shù),image_filter 的第一個(gè)參數(shù)resize/crop也不能用變量的方式傳輸。

由于這條請(qǐng)求的文件是不存在的,所以需要處理后proxy到本機(jī)網(wǎng)址127.0.0.1 rewrite到正常請(qǐng)求url,所以需要在配置文件增加:

server {

? ? listen 127.0.0.1:80;

? ? server_name 127.0.0.1;? ?

# 正則匹配? ? location

~* ^(.*\.(?:jpg|gif|png|jpeg|bmp))!{

# 重寫到正常的圖片url? ? ? rewrite

^(.*\.(?:jpg|gif|png))! $1;

? ? }

}

image_filter具體配置如下:

# 正則匹配

location ~* \.(?:jpg|gif|png|jpeg|bmp)!size=(.*)$ {

    # 設(shè)置變量來(lái)裝$1

? ? ? set$img_arg $1;

? ? ? if($img_arg ~"^(\d+)x(\d+)") {

? ? ? ? ? set$img_width $1;

? ? ? ? ? set$img_height $2;

? ? ? ? }

? ? ? ? if($img_arg ~"^(\d+)$") {

? ? ? ? ? set$img_width $1;

? ? ? ? ? set$img_height"-";

? ? ? ? }

? ? ? ? if($img_arg ~"^x(\d+)") {

? ? ? ? ? set$img_width"-";

? ? ? ? ? set$img_height $1;

? ? ? ? }

? ? ? ? proxy_pass http://127.0.0.1:80;

# 寬度與高度想使用圖片原有參數(shù),可設(shè)置為“-”? ? ? ? image_filter crop $img_width $img_height;

? ? }

基本配置已經(jīng)完成,需要設(shè)置cache的可以通過(guò)參數(shù)去設(shè)置;有什么不足之處請(qǐng)各位大神指教,好了,電腦得還給包工頭了,我得搬磚去了。

參考文章:

1.http://nginx.org/en/docs/http/ngx_http_image_filter_module.html

2.https://www.centos.bz/2017/03/using-nginx-image_filter-resize-images/

3.http://www.dnsdizhi.com/post-252.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容