nginx本身有支持图片处理的模块,通过外部插件也可以实现此功能。

libgd的安装

前提是要有libgd的库文件,

(1)去官网访问主页没问题,下载文件还是翻墙下的,为了方便大家提供一个链接:http://files.cnblogs.com/files/bugutian/libgd-2.1.1.tar

使用起来就是解压:

tar -vxf libgd-2.1..tar
cd libgd-2.1.
./configure
make
make install

就行了。如果启动nginx的时候还报找不到动态库,那就自己find一下,然后

export LD_LIBRARY_PATH=/Path/to/libgd.so:$LD_LIBRARY_PATH

在启动,或者把路径写到系统的环境变量也行。

(2)当然也还有更简单的方法,直接yum安装也行,自己配置好yum源,然后:

yum install gd-devel pcre-devel libcurl-devel

因为libcurl也是需要的一部分,所以一起安装。

相对的编译也会简单,可以不用下面那么麻烦。

./configure --prefix=/usr/local/nginx --with-pcre --add-module=../ngx_image_thumb-master
make
make install

按下面的方法配置即可。

一、with-http_image_filter_module模块安装

编译过程很简单

#./configure --prefix=./ --with-http_image_filter_module --with-pcre=../pcre-8.36
#make
#make install

一般情况下,nginx一般都需要用到正则表达式,所以对于图片处理器pcre就更不能少了,如果有pcre,我们的配置就可以写成下面这样:

location ~* /images/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ {
set $h $;
set $w $;
if ($h = "") {
rewrite /images/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /images/$.$ last;
}
if ($w = "") {
rewrite /images/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /images/$.$ last;
}
#根据给定的长宽生成缩略图
image_filter resize $h $w;
#原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer
image_filter_buffer 2M;
#error_page /images/notfound.jpg;
try_files /images/$.$ /images/notfound.jpg;
}

可以完成图片请求的自适应,如果没有,我们只能像下面这样,把缩略图的尺寸定死。

location ~ /{
#proxy_pass http://10.11.11.11;
image_filter resize ;
error_page = /empty;
}

(如果系统安装了pcre这个参数可以省略,因为高版本的nginx默认是安装了pcre的),图片处理就更不能少了,其他配置都是通用的。

二、ngx_image_thumb-maste的安装

当然上面的模块可以用,但是自适应性让人看着并不爽。而另一款插件ngx_image_thumb-maste配置起来就好用多了

源码地址:https://github.com/3078825/nginx-image/archive/master.zip

编译安装:

# ./configure --prefix=./ --add-module=../ngx_image_thumb-master --with-pcre=../pcre-8.36
# make
# make inatll

配置也不那么复杂,支持的功能也多

    location / {
root html;
index index.html index.htm;
image on;
image_output on;
image_water on;
image_water_type ;
image_water_file "/usr/local/nginx/html/vanke.png";
image_water_pos ;
image_water_min ;
#image_water_text Vanke.com;
#image_water_font_size ;
}

image on/off 是否开启缩略图功能,默认关闭
image_backend on/off 是否开启镜像服务,当开启该功能时,请求目录不存在的图片(判断原图),将自动从镜像服务器地址下载原图
image_backend_server 镜像服务器地址
image_output on/off 是否不生成图片而直接处理后输出 默认off
image_jpeg_quality 75 生成JPEG图片的质量 默认值75
image_water on/off 是否开启水印功能
image_water_type 0/1 水印类型 0:图片水印 1:文字水印
image_water_min 300 300 图片宽度 300 高度 300 的情况才添加水印
image_water_pos 0-9 水印位置 默认值9 0为随机位置,1为顶端居左,2为顶端居中,3为顶端居右,4为中部居左,5为中部居中,6为中部居右,7为底端居左,8为底端居中,9为底端居右
image_water_file 水印文件(jpg/png/gif),绝对路径或者相对路径的水印图片
image_water_transparent 水印透明度,默认20
image_water_text 水印文字 "Power By Vampire"
image_water_font_size 水印大小 默认 5
image_water_font 文字水印字体文件路径
image_water_color 水印文字颜色,默认 #000000

这里假设你的nginx 访问地址为 http://192.168.0.2:8082/
并在nginx网站根目录存在一个 test.jpg 的图片
通过访问
http://192.168.0.2:8082/test.jpg!c300x200.jpg 将会 生成/输出 test.jpg 300x200 的缩略图
其中 c 是生成图片缩略图的参数, 300 是生成缩略图的宽度, 200 是生成缩略图的高度
一共可以生成四种不同类型的缩略图。
支持 jpeg / png / gif (Gif生成后变成静态图片)
C 参数按请求宽高比例从图片高度 10% 处开始截取图片,然后缩放/放大到指定尺寸( 图片缩略图大小等于请求的宽高 )
M 参数按请求宽高比例居中截图图片,然后缩放/放大到指定尺寸( 图片缩略图大小等于请求的宽高 )
T 参数按请求宽高比例按比例缩放/放大到指定尺寸( 图片缩略图大小可能小于请求的宽高 )
W 参数按请求宽高比例缩放/放大到指定尺寸,空白处填充白色背景颜色( 图片缩略图大小等于请求的宽高

参照上面的配置,也有以下的写法

http://192.168.0.2:8082/test.c300x300.jpg
http://192.168.0.2:8082/test.t300x300.jpg
http://192.168.0.2:8082/test.m300x300.jpg
http://192.168.0.2:8082/test.w300x300.jpg
http://192.168.0.2:8082/test.jpg!c300x300.jpg
http://192.168.0.2:8082/test.jpg!t300x300.jpg
http://192.168.0.2:8082/test.jpg!m300x300.jpg
http://192.168.0.2:8082/test.jpg!w300x300.jpg

但是这个模块当然也有缺点,大量的图片处理肯定很耗费cpu和内存,所以在这个服务器前一定要配个缓存服务器,第二个就是容易遭到攻击,因为可以支持缩放,所以黑客可以故意用很大的尺寸来请求小图片,这样将非常耗费服务器的存储,尤是图片命名规则一看就清楚的网站和图片名称容易被爬取的网站更容易被攻击。而第一个模块因为可以设置缓存大小,可以稍做限制。

当然此模块代码不多,可以通过修改源码的方式,解决上面的问题。

但在实践过程中,发现在并发的情况下(ngx_imgthumb不经过反向代理)直接应对请求,如果图片比较大,会出现nginx报signal 11的情况。

当然具体的配置还是要参考官网:https://github.com/oupula/ngx_image_thumb/blob/master/README_EN.md

比如,配置之后发现如果图片不存在,本应返回404但是却响应很慢。这样就可以配置:

image_backend off;
image_backend_server http://baidu.com/docs/aabbc.png;

配置一个不存在的地址,是因为他代码里面的off不起作用。

nginx图片处理相关的更多相关文章

  1. nginx图片处理

    前言 不管一个系统或网站的大与小,都存在相应的图片处理,生成缩略图.为图片加水印等等,如果涉及到APP端,这个图片的处理需求变得更加重要了,因为在目前看来,客户端的屏幕大小不一,会导致以下问题: 1. ...

  2. (转)Nginx图片服务器

    本文转至博客http://wenxin2009.iteye.com/blog/2117079 Nginx搭建图片服务器 Nginx下载地址:http://nginx.org/en/download.h ...

  3. 【Nginx】配置nginx图片服务器

    想通过nginx来访问服务器上的图片 可以搭建一个nginx图片服务器. 做法如下: 先安装nginx,这里直接用yum来进行安装的 安装方法如下: https://blog.csdn.net/iml ...

  4. 搭建Nginx图片服务器

    搭建Nginx图片服务器 Part-I 安装Nginx 安装PCRE 下载 ngx_cache_purge 并解压,用来清除缓存 下载Nginx并解压 cd nginx-1.7.7 编译,--pref ...

  5. 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式

    渐进式jpeg(progressive jpeg)图片及其相关   一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...

  6. 用nginx图片缓存服务器

    图片的存储硬件 把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很: 如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能 ...

  7. css图片的相关操作

    css图片的相关操作 1.案例源码 <!DOCTYPE html><html lang="en"><head> <meta charset ...

  8. 【笔记】Nginx热更新相关知识

    (以下学习笔记内容均摘自参考链接,仅供个人查阅)   1.inotify文件系统监控特性 Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如 ...

  9. Nginx 图片服务器

    文件服务器:后台如果是集群,每次请求都会到不同的服务器,所以每台服务器的图片文件等都要做同步处理,才能保证每次用户不管访问到哪台服务器都能获取一样的资源.这种做法开销会很大,专门使用 nginx 作为 ...

随机推荐

  1. 1.3 基础知识——GP2.1 方针(Policy)

    摘要: 方针这个GP每个PA都有,其实CMMI实践有没有实在价值,就在于方针!如果我们做出来的CMMI实践仅仅就是写文档.多步骤.没事找事,那其实就是违背了公司的商业目标,公司的商业目标简单说就是:用 ...

  2. 3、软件评测师要阅读的书籍 - IT软件人员书籍系列文章

    软件评测师在项目组的作用也是非常大的.微软的做法是一个软件工程师搭配两个软件评测师,这样能够减少软件系统存在的问题.但是,笔者发现,软件评测在这些年的发展还是比较缓慢的,除了人力进行的测试外,就是软件 ...

  3. MongoDB 优点

    任何关系型数据库,具有典型的架构设计,显示表和这些表之间的关系.虽然在 MongoDB中,没有什么关系的概念. MongoDB比RDBMS的优势 架构:MongoDB是文档型数据库,其中一个集合保存不 ...

  4. Java虚拟机内存管理原理基础入门

    Jdk:Java程序设计语言.Java虚拟机.Java API类库. Jdk是用于支持Java程序开发的最小环境. Jre:Java API类库中的Java SE API子集.Java虚拟机. Jre ...

  5. android项目中配置NDK自动编译生成so文件

    1 下载ndk开发包   2 在android 项目中配置编译器(以HelloJni项目为例)  2.1 创建builer  (a)Project->Properties->Builder ...

  6. 十五天精通WCF——第十二天 说说wcf中的那几种序列化

    我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的过程,也就是将参数序列化为message,这篇 我们就来说说这里的序列化,蛮有意思的,可能初学者也明白,在wcf ...

  7. SQL Server 2000:提示“未与信任SQL SERVER连接相关连”错误

    在使用“用户模式”登陆SQL Server 2000时提示“未与信任SQL SERVER连接相关连”错误,因为在安装SQL Server时选择“仅Windows”模式,所以所有用户都不可以登陆. 解决 ...

  8. ibatis动态多条件查询及模糊查询(oracle,mysql,sql)

    首先是模糊查询的问题,开始时我使用如下条件:select * from user where name like '%#value#%'. 可是怎么也不行,好像还报错了.后来在网上找到了解决方法,就是 ...

  9. coursera机器学习笔记-神经网络,初识篇

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  10. windows下socket学习(一)

    关于socket的文章,园子里面有很多,其实无非就是 WSAStartup.socket.bind.listen.accept.recv.send(服务端),WSAStartup.socket.con ...