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 作为 ...
随机推荐
- Java字符串中常见的10个问题
下面是Java中10个最常见的关于字符串的问题. 怎样比较字符串?使用==还是equals() 简单的说,“==”用于判断引用是否相等,equals()用于判断值是否相等.除非你要比较两个字符串是否是 ...
- VS发布,应用程序验证未成功。无法继续。
用VS2005发布客户端程序. 1.发布:点击工程项目属性,右键发布按钮,一切正常. 2.测试安装:提示如下提示框: 打开详细信息内容如下: 错误摘要 以下是错误摘要,这些错误的详细信息列在该日志的后 ...
- JS代码判断字符串中有多少汉字
$("form").submit(function () { var content = editor.getContentTxt(); var sum = 0; re = /[\ ...
- ubuntu同时安装qt4.8和qt5.7
这是ubuntu默认安装(从apt安装)的路径和相关文件,建议编译安装到/opt目录下,使用./configure --prefix=/opt/Qt4.8 /usr/share/qt4 /usr/sh ...
- C# WebService动态调用
前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 REST ...
- [转]Stop Sharing Session State between Multiple Tabs of Browser
本文转自:http://jinaldesai.net/stop-sharing-session-state-between-multiple-tabs-of-browser/ Scenario: By ...
- UART Explained(转载)
做嵌入式开发,UART几乎是必不可少的,调试串口.GPS.GPRS.Bluetooth等模块很多都是用的UART接口.时下火热的IoT也不乏UART的身影,串口的BLE.WIFI.Zigbee.Lor ...
- 强加密RNGCryptoServiceProvider
.net RNGCryptoServiceProvider 对应 java SecureRandom public class SecureRandomextends Random This cla ...
- Flex数据绑定陷阱(一)
Flex数据绑定陷阱:常见的误用和错误 当构建Flex或者Adobe AIR程序时,将一个对象的值自动的传递给另一个对象这种处理是数据绑定最常 用并最有用的特征之一. 尽管如此,同时数据绑定会减缓程序 ...
- webform:分页组合查询
一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql"& ...