[LNMP]缩略图网关:Nginx的http_image_filter_module应用

http_image_filter_module是nginx官方提供的图片处理模块,支持jpg、gif、png格式,但模块不是默认安装,需要在编译安装的时候开启本模块。官方模块地址:image_filter_module

[LNMP]缩略图网关:Nginx的http_image_filter_module应用_第1张图片
图片裁剪+缩略图

解决应用需求


  1. 生成指定比例/尺寸的图片;
  2. 压缩图片体积,生成图片的缩略图;
  3. 图片缓存加速。

解决方案


image_filter_module + proxy_cache,前者实现图片处理,后者实现静态内容缓存。
1台nginx前端(proxy_cache)+n台图片后端处理(http_image_filter_module)

安装



gd库依赖安装:yum install gd-devel
模块安装:在已有的编译参数加上新参数并重新编译 --with-http_image_filter_module

配置


前端机(反向代理机)nginx(proxy_cache)配置
  1. 创建缓存目录

    chown –R nobody/data/ nginx_temp /data/nginx_cache
  2. 在原配置上新增


http {

proxy_temp_path /data/nginx_temp;
proxy_cache_path /data/nginx_cache levels=1:2 keys_zone=dCache:200minactive=10d max_size=3g;

}

server {
location / {

proxy_cache dCache;
proxy_cache_valid 200 301 302 10d;
proxy_cache_valid 404 500 503 1m;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://images_filter;

}
}

后端机nginx配置

裁剪为60*60图片

location ~/index/w60/ (.+)$ {
proxy_pass http://www.example.com/$2;
image_filter crop 60 60;
image_filter_jpeg_quality 80;
error_page 415 = /empty;
}

裁剪为宽度为300的图片

location ~/index/w300/ (.+)$ {
proxy_pass http:// www. example.com/$2;
image_filter resize 300 -;
image_filter_jpeg_quality 80;
error_page 415 = /empty;
}

配置参数


off 关闭
test 测试
size json格式返回图片信息
rotate 旋转
resize 缩放(如果要等比缩放,则 其中一个参数用 – 表示)
crop 裁减(如果要等比裁减,则 其中一个参数用 – 表示)
image_filter_jpeg_quality: jpg图片质量,从1~100

启动


安装完成后,将所有的nginx服务重启,则服务启动完成。

小结


  1. 用于等比图片缩略图效果较好,根据热点图片的数量和负载相应调节前端机(proxy_cache)的内存缓存和硬盘缓存的空间;
  2. 改变原比例的裁减效果不佳(居中裁减),毕竟图片的焦点区域不可预测;
  3. 图片修改后,缓存图片不会同步修改(需另外引入proxy_cache_purge 模块)。

总结,该方案适用于简单的图片缩略图网关,对机器性能要求不高,博主在日均100w pv的应用中使用,约4核4g服务器,压力不大;

整理于2014/10

你可能感兴趣的:([LNMP]缩略图网关:Nginx的http_image_filter_module应用)