首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Nginx日志推送到远程服务器
Nginx获取客户端真实IP、域名、协议、端口
负载均衡、限流、缓存、黑白名单和灰度发布
Nginx生成缩略图
Nginx封禁IP和IP段
按日期分割Nginx日志
配置Nginx日志
为已安装的Nginx动态添加模块
Nginx配置WebSocket
Nginx实现MySQL数据库负载均衡
Nginx解决跨域问题
Nginx搭建流媒体服务器
Nginx支持高并发配置
Nginx的高可用负载均衡
当前位置:
首页>>
技术小册>>
Nginx典型应用场景
小册名称:Nginx典型应用场景
###生成缩略图方案 为了手机端浏览到与手机分辨率相匹配的图片,提高 APP 访问速度以及减少用户的手机流量,需要将图片生成缩略图,这边共有以下解决方案。 A.发布新闻生成多重缩略图 – 无法匹配到各种尺寸图片 B.当相应缩略图不存在,则使用 PHP 或者 Java 等程序生成相应缩略图 – 需要程序员协助 C.使用 Nginx 自带模块生成缩略图 – 运维即可完成 D.使用 Nginx+Lua 生成缩略图 经过多方的考虑,决定使用方案 C,使用 Nginx 自带模块生成缩略图。 ###Nginx生成缩略图 配置Nginx 使用 Nginx 自带模块生成缩略图,模块: --with-http_image_filter_module,例如,我们可以使用如下参数安装Nginx: ``` ./configure --prefix=/usr/local/nginx-1.19.1 --with-http_stub_status_module --with-http_realip_module --with-http_image_filter_module --with-debug ``` 接下来,修改 nginx.conf 配置文件,或者将下面的配置放到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://www.maxiaoke.com/123_100x10.jpg 当我们在浏览器地址栏中输入上面的链接时,Nginx会作出如下的逻辑处理。 首先判断是否存在原图 123.jpg,不存在直接返回 404(如果原图都不存在,那就没必要生成缩略图了) 跳转到 http://www.maxiaoke.com/123.jpg?h=100&w=10,将参数高 h=100 和宽 w=10 带到 url 中。 Image_filter resize 指令根据 h 和 w 参数生成相应缩略图。 注意:使用Nginx生成等比例缩略图时有一个长宽取小的原则,例如原图是 100*10,你传入的是 10*2,那么Nginx会给你生成 10*1 的图片。生成缩略图只是 image_filter 功能中的一个,它一共支持 4 种参数: test:返回是否真的是图片 size:返回图片长短尺寸,返回 json 格式数据 corp:截取图片的一部分,从左上角开始截取,尺寸写小了,图片会被剪切 resize:缩放图片,等比例缩放 Nginx 生成缩略图优缺点 优点: 根据传入参数即可生成各种比例图片 不占用任何硬盘空间 缺点: 消耗 CPU 访问量大将会给服务器带来比较大的负担 建议: 生成缩略是个消耗 CPU 的操作,如果访问量比较大的站点,最好考虑使用程序生成缩略图到硬盘上,或者在前端加上 Cache缓存或者使用 CDN。
上一篇:
负载均衡、限流、缓存、黑白名单和灰度发布
下一篇:
Nginx封禁IP和IP段
该分类下的相关小册推荐:
Nginx面试指南