近期接到一个需求,要求网站上的图片分三个尺寸显示,后台图片组件(坑货同事写的)已有和业务耦合有点深不好扩展,在浏览众多博客论坛后,发现用nginx http_image_filter_module可以完美解决我的问题。
1.如果已经装好nginx 可以执行nginx -V 查看 arguments 是否有image-filter 模块
2.没有的话 可以从新执行 configure 把image-filter 模块加入,做nginx模块升级 记住不要 make 和make install 这样的话就相当于重新安装了(如果可以的话,建议重新安装)
3. nginx argument 配置
./configure --prefix=/usr/local/nginx/nginx-1.10.1 --sbin-path=/usr/local/nginx/nginx-1.10.1 --with-poll_module --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-openssl=/usr/local/nginx/openssl-1.1.0 --with-pcre=/usr/local/nginx/pcre-8.39 --with-http_image_filter_module
每个模块的具体作用就不在这里说明了,可以去 http://www.nginx.cn/ 或者nginx.org 上自行吸收,根据足记的需求配置。
4. 坑点:在configure时 提示xxxGDxxx 说明环境中没有 image-filter 模块需要的依赖的GD包
(为了方便和gd相关的全部都安装了)
yum -y installgd-devel libjpeg-devel libpng-devel php-gdlibjpeg* libpng* freetype* gd*
mac上的话推荐大家使用 brew包管理 直接 brew install gdlib ok了
5.nginx.conf配置
过滤表达式:^/pic(.*)_(\d+)x(\d+).jpg$
nginx conf
location ~* /pic/(.*)_(\d+)x(\d+)\.jpg$ {
alias /webpic/pic/$1.jpg;
#rewrite /pic/$1.jpg last;
image_filter resize $2 $3;
image_filter_buffer 50M;
}
重点说明 root 和 alias 的区别 root表示真实的文件路径配置root的时要配置到 请求文件路径的父级
alias 则需要全部包含(这个地方坑了我近一天的时间,一直404和415)
6.415错误
裁剪图片是最大的缓存 超过缓存值就会出现415
(但是不一定所有的415都是应为缓存大小不够,也可能是404。对nginx比较熟悉的同学也可做原图404的判断,本人比较懒就不考虑这样的问题了)
至于image-filter 还有好多图片的功能(旋转,水印。。。)就不在这里说明了(其实是我也不会,哈哈)。有兴趣的同学可以仔细研究下,加QQ群147210676 大家一起交流。