nginx本身有支持图片处理的模块,通过外部插件也可以实现此功能。 libgd的安装前提是要有libgd的库文件, (1)去官网访问主页没问题,下载文件还是FQ下的,为了方便大家提供一个链接:http://files.cnblogs.com/files/bugutian/libgd-2.1.1.tar 使用起来就是解压: tar -vxf libgd-2.1.1.tar cd libgd-2.1.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也是需要的一部分,所以一起安装。 一、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 $2; set $w $3; if ($h = "0") { rewrite /images/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /images/$1.$4 last; } if ($w = "0") { rewrite /images/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /images/$1.$4 last; } #根据给定的长宽生成缩略图 image_filter resize $h $w; #原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer image_filter_buffer 2M; #error_page 415 /images/notfound.jpg; try_files /images/$1.$4 /images/notfound.jpg; } 可以完成图片请求的自适应,如果没有,我们只能像下面这样,把缩略图的尺寸定死。 location ~ /{ #proxy_pass http://10.11.11.11; image_filter resize 100 100; error_page 415 = /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 0; image_water_file "/usr/local/nginx/html/vanke.png"; image_water_pos 0; image_water_min 300 300; #image_water_text Vanke.com; #image_water_font_size 14; } image on/off 是否开启缩略图功能,默认关闭 这里假设你的nginx 访问地址为 http://192.168.0.2:8082/ 参照上面的配置,也有以下的写法 http://192.168.0.2:8082/test.c300x300.jpg 但是这个模块当然也有缺点,大量的图片处理肯定很耗费cpu和内存,所以在这个服务器前一定要配个缓存服务器,第二个就是容易遭到攻击,因为可以支持缩放,所以黑客可以故意用很大的尺寸来请求小图片,这样将非常耗费服务器的存储,尤是图片命名规则一看就清楚的网站和图片名称容易被爬取的网站更容易被攻击。而第一个模块因为可以设置缓存大小,可以稍做限制。 当然此模块代码不多,可以通过修改源码的方式,解决上面的问题。 但在实践过程中,发现在并发的情况下(ngx_imgthumb不经过反向代理)直接应对请求,如果图片比较大,会出现nginx报signal 11的情况。
|
|
来自: WindySky > 《Nginx图片服务器》