http_image_filter_module是nginx官方提供的图片处理模块,支持jpg、gif、png格式,但模块不是默认安装,需要在编译安装的时候开启本模块。官方模块地址:image_filter_module
图片裁剪+缩略图解决应用需求
- 生成指定比例/尺寸的图片;
- 压缩图片体积,生成图片的缩略图;
- 图片缓存加速。
解决方案
image_filter_module + proxy_cache,前者实现图片处理,后者实现静态内容缓存。
1台nginx前端(proxy_cache)+n台图片后端处理(http_image_filter_module)
安装
<pre>
gd库依赖安装:yum install gd-devel
模块安装:在已有的编译参数加上新参数并重新编译 --with-http_image_filter_module
</pre>
配置
前端机(反向代理机)nginx(proxy_cache)配置
- 创建缓存目录
<pre>
chown –R nobody/data/ nginx_temp /data/nginx_cache
</pre> - 在原配置上新增
<pre>
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;
…
}
}
</pre>
后端机nginx配置
<pre>
裁剪为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;
}
</pre>
配置参数
off 关闭
test 测试
size json格式返回图片信息
rotate 旋转
resize 缩放(如果要等比缩放,则 其中一个参数用 – 表示)
crop 裁减(如果要等比裁减,则 其中一个参数用 – 表示)
image_filter_jpeg_quality: jpg图片质量,从1~100
启动
安装完成后,将所有的nginx服务重启,则服务启动完成。
小结
- 用于等比图片缩略图效果较好,根据热点图片的数量和负载相应调节前端机(proxy_cache)的内存缓存和硬盘缓存的空间;
- 改变原比例的裁减效果不佳(居中裁减),毕竟图片的焦点区域不可预测;
- 图片修改后,缓存图片不会同步修改(需另外引入proxy_cache_purge 模块)。
总结,该方案适用于简单的图片缩略图网关,对机器性能要求不高,博主在日均100w pv的应用中使用,约4核4g服务器,压力不大;
整理于2014/10
网友评论