天天看點

nginx實時生成縮略圖存儲到硬碟上

   現在随着各終端的出現(手機,ipad等平闆),以及各種終端的手機分辨率和尺寸都不同,現在手機使用者流量都是寶,網上出現了各種各樣的生成縮略圖功能的架構,有使用php實時生成縮略圖的,也有用nginx + lua實作的,上節我也講到了使用nginx生成縮略圖,但是使用者每次通路都需要生成一次,會給cpu和硬碟帶來比較大的壓力,今天帶來了另外一種方式,這次使用nginx将原圖生成縮略圖到硬碟上.看我的配置

1、首先建立好cache目錄

[[email protected] ~]# mkdir -p /data/stie_cache    

[[email protected] ~]# 

nginx實時生成縮略圖存儲到硬碟上

2、修改nginx配置,增加如下内容

location ~* ^/resize {

                root /data/site_cache/$server_name;

                set $width 150;

                set $height 100;

                set $dimens "";

                if ($uri ~* "^/resize_(\d+)x(\d+)/(.*)" ) {

                        set $width $1;

                        set $height $2;

                        set $image_path $3;

                        set $demins "_$1x$2";

                }

                if ($uri ~* "^/resize/(.*)" ) {

                        set $image_path $1;

                }

                set $image_uri image_resize/$image_path?width=$width&height=$height;

                if (!-f $request_filename) {

                        proxy_pass http://127.0.0.1/$image_uri;

                        break;

                }

                proxy_store /data/site_cache/$server_name/resize$demins/$image_path;

                proxy_store_access user:rw group:rw all:r;

                proxy_set_header Host $host;

                expires      30d;

                access_log off;

        }

        location /image_resize {

                alias /data/site/$server_name/;

                image_filter resize $arg_width $arg_height;

                image_filter_jpeg_quality 75;

                access_log off;

        }

完整的nginx配置檔案如下:

[[email protected] conf]# cat nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {

        listen       80;

        server_name  localhost;

        location / {

            root   html;

            index  index.html index.htm;

           image on;

          image_output on;

        }

        location ~* ^/resize {

                root /data/site_cache/$server_name;

                set $width 150;

                set $height 100;

                set $dimens "";

                if ($uri ~* "^/resize_(\d+)x(\d+)/(.*)" ) {

                        set $width $1;

                        set $height $2;

                        set $image_path $3;

                        set $demins "_$1x$2";

                }

                if ($uri ~* "^/resize/(.*)" ) {

                        set $image_path $1;

                }

                set $image_uri image_resize/$image_path?width=$width&height=$height;

                if (!-f $request_filename) {

                        proxy_pass http://127.0.0.1/$image_uri;

                        break;

                }

                proxy_store /data/site_cache/$server_name/resize$demins/$image_path;

                proxy_store_access user:rw group:rw all:r;

                proxy_set_header Host $host;

                expires      30d;

                access_log off;

        }

        location /image_resize {

                alias /data/site/$server_name/;

                image_filter resize $arg_width $arg_height;

                image_filter_jpeg_quality 75;

                access_log off;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

[[email protected] conf]# 

提示:

nginx編譯的時候要添加參數--with-http_image_filter_module,保險起見将子產品ngx_image_thumb-master也帶上,是以最終nginx編譯參數為:

 ./configure   --add-module=../ngx_image_thumb-master/ --with-http_image_filter_module

生成縮略圖流程如下:

1、原圖在http://10.0.0.10/image/1.jpg。我需要一份100x100的縮略圖。

2、請求http://10.0.0.10/resize_100x100/image/1.jpg.

3、這個請求進入了location ~* ^/resize,接着判斷image_path這個目錄下是否存在這張圖檔,如果存在直接放回給使用者,

4、不存在那麼跳轉到http://10.0.0.10/image_resize/image/1.jpg?width=100&height=100;

5、location /image_resize根據傳入的width和height執行縮略功能,并且設定圖像品質為75

6、接着生成檔案到/data/site_cache/10.0.0.10/resize_100x100/image/1.jpg

7、并且傳回圖檔給使用者

8、nginx生成縮略圖到硬碟上的功能到這裡就結束了

      本文轉自027ryan  51CTO部落格,原文連結: http://blog.51cto.com/ucode/1751605 ,如需轉載請自行聯系原作者