在Nginx中配置image filter模块来实现动态生成缩略图

 更新时间:2015年12月30日 16:44:02   作者:mood  
这篇文章主要介绍了在Nginx中配置image filter模块来实现动态生成缩略图的方法,包括缩略图尺寸的设置等方面的介绍,需要的朋友可以参考下

先来看一下什么是nginx的image filter模块。

HttpImageFilterModule用来裁剪过大的图片到指定大小,是nginx自带模块,默认不会开启
开启HttpImageFilterModule需要在编译要带上参数 --with-http_image_filter_module

该模块主要有两个指令:
语法: image_filter (test | size | resize width height | crop width height)
默认是: 无
可出现的上下文: location

该指令指定图像的转化形式:

test - 测试回复是否是JPEG、GIF、或PNG图片(不支持BMP等其他格式),出错时返回415。
size - 返回图片的JSON数据,比如:( "Img": ( "width": 100, "height": 100, "type": "gif"))
resize - 根据设置按比例得减小图像,比如100*100的图片,而设置是50*25,减小后的图片为25*25。如果你只想设置一个维度,可以用“-”代替。出错时返回415。
crop - 根据设置按比例得减小图像,然后裁剪成跟设置一样大小的图片。比如100*100的图片,而设置是50*25,减小后的图片为50*50,Nginx会选取中间高度25的像素,形成50*25的图片,所以图片会有缺失。如果你只想设置一个维度,可以用“-”代替。出错时返回415。

语法: image_filter_buffer size
默认值: image_filter_buffer 1M
可出现的位置: http, server, location

该指令设置单图片缓存的最大值,如果过滤的图片大小超过缓存大小,会报错返回415。

现在开始时重点:

有了如上认识再配合locaiont、if、image_filter 就可以让nginx动态生成缩略图了。

假设你的图片位于/img目录下

访问缩略图方式
https://www.jb51.net/img/9GUMJR7200AJ0003_90x90.jpg
访问原图方式
https://www.jb51.net/img/9GUMJR7200AJ0003_90x0.jpg
https://www.jb51.net/img/9GUMJR7200AJ0003_0x50.jpg
https://www.jb51.net/img/9GUMJR7200AJ0003_0x0.jpg
https://www.jb51.net/img/9GUMJR7200AJ0003.jpg

添加如下配置到server上下文即可

    location ~* /img/(.+)_(d+)x(d+).(jpg|gif|png)$ {      
      set $h $2;
      set $w $3;
      if ($h = "0") {
        rewrite /img/(.+)_(d+)x(d+).(jpg|gif|png)$ /img/$1.$4 last;
      }
      if ($w = "0") {
        rewrite /img/(.+)_(d+)x(d+).(jpg|gif|png)$ /img/$1.$4 last;
      }

      #根据给定的长宽生成缩略图
      image_filter resize $h $w;
      #原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer 
      image_filter_buffer 2M;             
      
      #error_page 415       /img/notfound.jpg;
      try_files /img/$1.$4 /img/notfound.jpg; 
    }

    location ~* /img {
      
    }

生成缩略图只是image_filter功能中的一个,它一共支持4种参数:
    test:返回是否真的是图片
    size:返回图片长短尺寸
    corp:截取图片的一部分
    resize:缩放图片

location ~ ^/test/(.*)$ {
      image_filter size;
      root  /var/www/_xxx;
      index index.html index.htm;
    }

输出信息类似:

{ "img" : { "width": 1024, "height": 537, "type": "jpeg" } }

是一个JSON,压力测试了一下,还是很给力,500个并发,CPU占用在17%左右。

相关文章

  • nginx安装以及配置的详细过程记录

    nginx安装以及配置的详细过程记录

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,下面这篇文章主要给大家介绍了关于nginx安装以及配置的详细过程,文章将实现的过程介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • 详解Nginx 工作原理

    详解Nginx 工作原理

    这篇文章主要介绍了Nginx 工作原理,帮助大家更好的理解和学习nginx,感兴趣的朋友可以了解下
    2020-10-10
  • Nginx工作模式及代理配置的使用细节

    Nginx工作模式及代理配置的使用细节

    这篇文章主要为大家介绍了Nginx工作模式及代理配置的使用细节,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 使用Nginx实现灰度发布的使用

    使用Nginx实现灰度发布的使用

    这篇文章主要介绍了使用Nginx实现灰度发布的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • filebeat同时收集错误日志与普通日志并存详解

    filebeat同时收集错误日志与普通日志并存详解

    这篇文章主要为大家介绍了filebeat同时收集错误日志与普通日志并存详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Nginx服务器基本的模块配置和使用全攻略

    Nginx服务器基本的模块配置和使用全攻略

    这篇文章主要介绍了Nginx服务器基本的模块配置和使用全攻略,从Nginx的安装开始细致入微地讲解各个常用模块的部署和参数使用,需要的朋友可以参考下
    2016-04-04
  • nginx服务器配置解决ajax的跨域问题

    nginx服务器配置解决ajax的跨域问题

    本文给大家分享的是一个nginx服务器配置解决ajax的跨域问题的小技巧,非常的实用,有相同需求的小伙伴可以参考下
    2017-03-03
  • nginx下gzip配置参数详解

    nginx下gzip配置参数详解

    这篇文章主要介绍了nginx下gzip配置参数详解,本文同时给出了配置例子,以及一些注意事项,需要的朋友可以参考下
    2014-08-08
  • 关于nginx负载均衡和反向代理的讲解

    关于nginx负载均衡和反向代理的讲解

    这篇文章主要介绍了nginx负载均衡和反向代理,具有很好的参考价值,希望对大家有所帮助,大家一起来看看吧
    2021-09-09
  • Nginx中的用户认证配置及阻止用户使用代理访问的方法

    Nginx中的用户认证配置及阻止用户使用代理访问的方法

    这篇文章主要介绍了Nginx中的用户认证配置及阻止用户使用代理访问的方法,用户认证部分用到了自带的ngx_http_auth_basic_module模块,需要的朋友可以参考下
    2016-01-01

最新评论