nginx图片处理相关
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图片处理相关的更多相关文章
- nginx图片处理
前言 不管一个系统或网站的大与小,都存在相应的图片处理,生成缩略图.为图片加水印等等,如果涉及到APP端,这个图片的处理需求变得更加重要了,因为在目前看来,客户端的屏幕大小不一,会导致以下问题: 1. ...
- (转)Nginx图片服务器
本文转至博客http://wenxin2009.iteye.com/blog/2117079 Nginx搭建图片服务器 Nginx下载地址:http://nginx.org/en/download.h ...
- 【Nginx】配置nginx图片服务器
想通过nginx来访问服务器上的图片 可以搭建一个nginx图片服务器. 做法如下: 先安装nginx,这里直接用yum来进行安装的 安装方法如下: https://blog.csdn.net/iml ...
- 搭建Nginx图片服务器
搭建Nginx图片服务器 Part-I 安装Nginx 安装PCRE 下载 ngx_cache_purge 并解压,用来清除缓存 下载Nginx并解压 cd nginx-1.7.7 编译,--pref ...
- 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式
渐进式jpeg(progressive jpeg)图片及其相关 一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...
- 用nginx图片缓存服务器
图片的存储硬件 把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很: 如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能 ...
- css图片的相关操作
css图片的相关操作 1.案例源码 <!DOCTYPE html><html lang="en"><head> <meta charset ...
- 【笔记】Nginx热更新相关知识
(以下学习笔记内容均摘自参考链接,仅供个人查阅) 1.inotify文件系统监控特性 Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如 ...
- Nginx 图片服务器
文件服务器:后台如果是集群,每次请求都会到不同的服务器,所以每台服务器的图片文件等都要做同步处理,才能保证每次用户不管访问到哪台服务器都能获取一样的资源.这种做法开销会很大,专门使用 nginx 作为 ...
随机推荐
- uniqid函数产生唯一id,减少碰撞几率
$uuid = str_replace(".","",uniqid(mt_rand(100000,999999),true)); //基于当前时间微妙数,与mt ...
- 分享2个网址二维码API接口
分享2个网址二维码生成API接口,用它们只需要填写好网址就能自动生成二维码,分别来自与bshare和jiathis分享工具中,如您需要就把下面的二维码生成API接口复制到你需要地方. 说明:把url= ...
- Oracle BIEE启停脚本
作为BI的开发人员,经常启停BI服务在所难免,启动的过程又比较长,命令需要不同目录切换,简直烦死人呢, 特意整理了linux中的启动脚本,将以下脚本存成biee.sh,后面的过程就相当简单了, 启动: ...
- FATAL ERROR: Could not find ./bin/my_print_defaults的解决办法
对mysql数据库初始化过程中,会有如下报错信息: 1 2 3 4 5 6 7 [root@localhost scripts]# ./mysql_install_db --user=mysql FA ...
- php 页面传递数组元素
前台页面的表单中添加多个input元素,如下: <form action="a.php"> <input type="text" name= ...
- java自定义Annotation(载自百度文库)
java中自定义annotation需要@interface关键字和用到几个内置annotation. 用到的注解有@Target,@Retention,@Documented,@Inherited ...
- HTTP请求工具类
HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...
- 这些web前端特效你造吗?
友情提示:所有特效效果均是GIF图片演示(均有源码下载),所以这个博文可能加载的比较慢,请谅解. 凛冬将至(Winter Is Coming),在上一篇博客凛冬将至,用几款特效暖暖身得到了比较好的响应 ...
- my_strlen()
int my_strlen(const char* S){ int i=0; while('\0'!=*(S+i)){ i++; } return i; }
- 如何让django方法自动地定期执行
实现思路:1.首先把需要自动执行的django method写成django command2.将自己定义的django command添加到cron中使用cron服务实现定期执行 Part1 在dj ...