Nginx之——生成缩略图配置

转载请注明出处:https://blog.csdn.net/l1028386804/article/details/80114630

为了手机端浏览到与手机分辨率相匹配的图片,提高 app 访问速度以及减少用户的手机流量,需要将图片生成缩略图,这边共有以下解决方案。

  • A.发布新闻生成多重缩略图 – 无法匹配到各种尺寸图片
  • B.当相应缩略图不存在,则使用 php 或者 java 等程序生成相应缩略图 – 需要程序员协助
  • C.使用 nginx 自带模块生成缩略图 – 运维即可完成
  • D.使用 nginx+lua 生成缩略图

经过多方的考虑,决定使用方案 C,使用 nginx 自带模块生成缩略图,模块: –with-http_image_filter_module.如下是我的安装参数:

./configure --prefix=/usr/local/nginx-1.4.1 --with-http_stub_status_module --with-http_realip_module --with-http_image_filter_module --with-debug

修改 nginx.conf 配置文件,或者放到你相应的 server 块中.

location ~* /(\d+)\.(jpg)$ {
	set $h $arg_h; # 获取参数h的值
	set $w $arg_w; # 获取参数 w 的值
	#image_filter crop $h $w;
	image_filter resize $h $w;# 根据给定的长宽生成缩略图
}
location ~* /(\d+)_(\d+)x(\d+)\.(jpg)$ {
	if ( -e $document_root/$1.$4 ) { # 判断原图是否存在
		rewrite /(\d+)_(\d+)x(\d+)\.(jpg)$ /$1.$4?h=$2&w=$3 last;
	}
	return 404;
}
例如图片:
http://test.ttlsa.com/123_100x10.jpg
  • 1、首先判断是否存在原图 123.jpg,不存在直接返回 404(如果原图都不存在,还生成缩略图干啥,对吧)
  • 2、跳转到 http://tset.ttlsa.com/123.jpg?h=100&w=10,将参数高 h 和宽 10 带到 url 中。
  • 3、 Image_filter resize 指令根据 h 和 w 参数生成相应缩略图。
备注:长宽取小,例如原图是 100*10,你传入的是 10*2,那么他会给你生成 10*1 的图片.生成缩略图只是 image_filter 功能中的一个,它一共支持 4 种参数:
  • test:返回是否真的是图片
  • size:返回图片长短尺寸,返回 json 格式数据
  • corp:截取图片的一部分,从左上角开始截取,尺寸写小了,图片会被剪切
  • resize:缩放图片,等比例缩放
  • nginx 生成缩略图优缺点
优点:
1、根据传入参数即可生成各种比例图片
2、不占用任何硬盘空间
缺点:
消耗 CPU,访问量大将会给服务器带来极大的负担.
建议:
生成缩略是个消耗 cpu 的操作,如果访问量比较大的站点,最好考虑使用程序生成缩略图到硬盘上,或者在前端加上 cache 或者使用 CDN。


你可能感兴趣的:(Nginx)