最近针对客户提供的图片大小不一,导致页面排版错乱,所以安装一个nginx的功能模块来裁剪图片,image_filter来对图片属性操作,控制图片大小,这样图片不会变形。
安装插件很快,但是配置rewrite规则同事遇到一些问题,规则不生效,一般规则xxx_100x200.jpg 或者xxx.jpg@100×200@ ,在图片后缀添加参数最好。
nginx给的默认配置都是
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
针对图片缓存配置,这个是通用配置,然后同事在这个规则下面 配置重新导致失败
正确的逻辑,在这个配置规则之前配置rewrite规则,最终解析需要对应到实际图片这种,逻辑顺序需要理清
location ~ (.+?)_(\d+)x(\d+)\.(gif|jpg|jpeg|png|bmp|swf)$
{
set $file $1_$2x$3_100.$4;
rewrite ^.*$ $file last;
}
location ~ (.+?)\.(gif|jpg|jpeg|png|bmp|swf)@(\d+)x(\d+)@$
{
set $file $1_$3x$4_100.$2;
rewrite ^.*$ $file last;
}
location ~ (.+?)_(\d+)x(\d+)_(\d+)\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
access_log off;
set $file $1.$5;
set $h $2;
set $w $3;
set $q $4;
if ($h = '0') {
rewrite ^.*$ $file last;
}
if ($w = '0') {
rewrite ^.*$ $file last;
}
image_filter_jpeg_quality $q;
# 根据给定的长宽生成缩略图
image_filter resize $h $w;
# 根据给定的长宽剪裁图片
image_filter crop $h $w;
# 原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer
image_filter_buffer 20M;
# error_page 415 /notfound.jpg;
try_files $file =404;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}