使用nginx image filter實現類OSS物件儲存中對圖片的實時處理
阿新 • • 發佈:2018-11-25
使用Nginx image_filter實現類似OSS圖片處理
在家使用自己的電腦做了一個小應用,可檢視照片,按以前的方式,需要在使用者上傳圖片後對進行裁剪壓縮,然後給前段一個縮圖地址與原圖地址。這種方式有兩個弊端磁碟空間的浪費、縮圖尺寸調整不便捷。是否有其他不使用雲OSS儲存的情況下自己實現一套類似OSS的圖片處理?
後來搜尋資料,發現使用nginx的image_filter可以實現。根據網上其他人的例項使用沒有成功。
安裝nginx與imageFilter不在複述,自己從網上看文章就可以了。我使用的版本是nginx 1.13.12 直接自帶該外掛。
自己調整後可以使用,下面貼出完整配置。
server { listen 80; server_name 127.0.0.1; charset utf-8; root /www/uploadfile; #攔截所有帶“!”號的圖片請求 location ~* ^(.*\.(?:jpg|gif|png|jpeg|bmp))!(.*){ #rewrite ^(.*\.(?:jpg|gif|png))! $1; #圖片訪問路徑 set $filename $1; #圖片壓縮尺寸 set $img_arg $2; #拆解處理尺寸引數,引數性質如200x400樣式 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; } if ( $img_width = "" ){ set $img_width 100; } if ( $img_height = ""){ set $img_height 100; } #使用內部跳轉,將尺寸引數傳遞 echo_exec /_imgFilt; } #圖片處理 location /_imgFilt { alias /www/uploadfile$filename; image_filter resize $img_width $img_height; image_filter_buffer 10M; } location ~ .*\.(swf|docx|doc|xls|xlsx|txt|pdf|ppt|pptx|mp3|zip|rar|tar|gz|mp4|ttf|ttc|fmap|fmi|theme)$ { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS'; expires 30d; } }
圖片訪問請求地址: http://127.0.0.1/upload/20181120/1542720637600.jpg!500x400
使用以上請求,就可以實現使用nginx image filter實施圖片處理。 因是自己的小應用在使用,所以效能與訪問速度方面還可以。
非常耗費CPU資源,如果是公司業務,該方式請謹慎使用!!!