Nginx创建和缓存缩略图

Nginx自带的image filter模块可以用于动态创建缩略图。缩略图的创建比较消耗CPU,所以要配合缓存来使用。但是Nginx不支持同时创建缩略图并缓存,所以创建缩略图和缓存的处理要分开。

# 动态创建缩略图,格式为  /t/1.jpg?width=200&height=200
location /t/ {
    # 放置图片目录
    alias /var/nginx/images; 

    # 图片过滤器buffer大小,必须比原图要大 
    image_filter_buffer 10M; 

    # arg_width 和 arg_height就是URL中的width和height
    image_filter resize $arg_width $arg_height; 
}

# 访问原图,格式为  /s/1.jpg。如果不需要访问原图,则不需要这项。
location /s/ {
    alias /var/nginx/images;
}

# 访问缩略图缓存, 比如/r200x200/1.jpg。如果不缓存,就不需要这个项。
location ~* ^/r {
    #目录必须预先创建,nginx用户有读写权限
    root /var/nginx/images/cache;

    # URL中取出宽度和高度,并拼接出动态创建缩略图的URL。
    set $width 150;  # 默认宽度
    set $height 100; # 默认高度
    if ($uri ~* "^/r(\d+)x(\d+)/(.*)" ) {
        set $width $1;
        set $height $2;
        set $image_path $3;
    }
    set $image_uri $image_path?width=$width&height=$height;

    # 如果缩略图不在缓存,那么访问创建缩略图URL
    if (!-f $request_filename) {
        # 假设这个服务器和端口是本机80
        proxy_pass http://127.0.0.1:80/t/$image_uri;
        break;
    }

    proxy_store on;
    proxy_temp_path /var/nginx/images/cache;   
}

官方文档

你可能感兴趣的:(Nginx创建和缓存缩略图)