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 作为 ...
随机推荐
- MAC OS 系统使用心得
1.Windows快捷键在 mac os 里怎么调用 今天用teamviewer链接我在公司的电脑.我想调试程序,我程序默认F5是启动调试,但在mac os里,F5是调节屏幕亮度的. 这时候遇到快捷键 ...
- uniqid函数产生唯一id,减少碰撞几率
$uuid = str_replace(".","",uniqid(mt_rand(100000,999999),true)); //基于当前时间微妙数,与mt ...
- yii2发送邮件教程
作者:白狼 出处:http://www.manks.top/article/yii2_swiftMailer本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...
- 最受欢迎的Java第三方库
前言 翻译自programcreek: 典型的Java项目通常会依赖一些第三方库,本文总结了一些最受欢迎的Java库,这些类库在各种应用程序中被广泛使用: 当然,Java SDK是最广泛使用的Java ...
- Java Gradle入门指南之简介、安装与任务管理
这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍. ...
- SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行)
前言 前面几篇我们分析了关于SQL Server关于性能调优的一系列内容,我把它分为两个模块. 第一个模块注重基础内容的掌握,共分7篇文章完成,内容涵盖一系列基础运算算法,详细分析了如何查看执行计划. ...
- Linux 多线程信号量同步
PV原子操作 P操作: 如果有可用的资源(信号量值>0),则此操作所在的进程占用一个资源(此时信号量值减1,进入临界区代码); 如果没有可用的资源(信号量值=0),则此操作所在的进程被阻塞直到系 ...
- RedHat Linux 9.0的安装+入门指南(图文并茂)
一,准备工作1,购买或下载Redhat9的安装光盘(3张盘)或镜像文件2,在硬盘中至少留2个分区给安装系统用,挂载点所用分区推荐4G以上,交换分区不用太大在250M左右比较适合,文件系统格式不论,反正 ...
- tcp选项TCP_DEFER_ACCEPT
tcp选项TCP_DEFER_ACCEPT http://blog.chinaunix.net/uid-23207633-id-274317.html 之前在项目测试的时候,如果第三次握手发完裸ack ...
- Python搜索目录下指定的文件,并返回绝对路径(包括子目录)
#!/usr/bin/python #coding=UTF-8 #FileName:search.py #文件搜索 import os; import sys; returnList = []; de ...