当前位置: 首页 > news >正文

《Nginx核心技术》第04章:生成缩略图

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.gitcode.host
文章汇总:https://binghe.gitcode.host/md/all/all.html
星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:用最简短的篇幅介绍Nginx最核心的知识,重点掌握Nginx如何生成缩略图,并能够灵活运用到实际项目中,维护高可用系统。

大家好,我是冰河~~

今天给大家介绍《Nginx核心技术》的第04章:生成缩略图,多一句没有,少一句不行,用最简短的篇幅讲述Nginx最核心的知识,好了,开始今天的内容。

4.1 本章概述

今天想写一篇使用Nginx如何生成缩略图的文章,想了半天题目也没想好,这个题目还是一名读者帮我起的。起因就是这位读者最近出去面试,面试官正好问了一个Nginx如何生成缩略图的问题。还别说,就是这么巧呀!!就冲这标题,也要写一篇干货满满的技术好文!!

关于Nginx的安装,小伙伴们可以参考《第03章:实现负载均衡、限流、缓存、黑白名单和灰度发布》

4.2 生成缩略图方案

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

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

经过多方的考虑,决定使用方案 C,使用 Nginx 自带模块生成缩略图。

4.3 Nginx生成缩略图

4.3.1 配置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;
}

4.3.2 访问图片

配置完成后,我们就可以使用类似如下的方式来访问图片。

http://www.binghe.com/123_100x10.jpg

当我们在浏览器地址栏中输入上面的链接时,Nginx会作出如下的逻辑处理。

  • 首先判断是否存在原图 123.jpg,不存在直接返回 404(如果原图都不存在,那就没必要生成缩略图了)
  • 跳转到 http://www.binghe.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:缩放图片,等比例缩放

4.3.3 Nginx 生成缩略图优缺点

优点:

  • 根据传入参数即可生成各种比例图片
  • 不占用任何硬盘空间

缺点:

  • 消耗 CPU
  • 访问量大将会给服务器带来比较大的负担

建议:

生成缩略是个消耗 CPU 的操作,如果访问量比较大的站点,最好考虑使用程序生成缩略图到硬盘上,或者在前端加上 Cache缓存或者使用 CDN。

好了,相信各位小伙伴们对如何通过Nginx生成缩略图有了进一步的了解,我是冰河,我们下期见~~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 7.19作业
  • 【网络】socket套接字基础知识
  • 【学习笔记】无人机系统(UAS)的连接、识别和跟踪(十)-无人机A2X服务
  • HTML2048小游戏
  • 【Apache Doris】周FAQ集锦:第 16 期
  • 【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例
  • 力扣题解(盈利计划)
  • C++多继承与虚继承
  • Artix7系列FPGA实现SDI视频编解码+UDP以太网传输,基于GTP高速接口,提供工程源码和技术支持
  • Unity UGUI 之 Canvas画布
  • 深入理解TCP/IP协议中的三次握手
  • GD32 MCU是如何进入中断函数的
  • Android 10.0 蓝牙音乐获取歌手、歌曲等信息功能实现
  • 微服务重启优化kafka+EurekaNotificationServerListUpdater
  • 【Docker】Docker-compose 单机容器集群编排工具
  • 深入了解以太坊
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • create-react-app项目添加less配置
  • hadoop集群管理系统搭建规划说明
  • Javascript编码规范
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • vue-router的history模式发布配置
  • windows下如何用phpstorm同步测试服务器
  • 诡异!React stopPropagation失灵
  • 欢迎参加第二届中国游戏开发者大会
  • 那些年我们用过的显示性能指标
  • 前端技术周刊 2019-02-11 Serverless
  • 前端面试题总结
  • 前端学习笔记之观察者模式
  • 入手阿里云新服务器的部署NODE
  • 学习笔记TF060:图像语音结合,看图说话
  • 白色的风信子
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (译) 函数式 JS #1:简介
  • (转)fock函数详解
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .NET中winform传递参数至Url并获得返回值或文件
  • .NET中分布式服务
  • .pyc文件是什么?
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?