nginx+lua_nginx+GraphicsMagick缩略图+tfs获取原图+ngx_cache_purge

环境介绍

[email protected]:~# uname -a
Linux ubuntu-1.230 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
[email protected]:~# cat /etc/issue
Ubuntu 12.04.1 LTS \n \l

[email protected]:~#

PS:以下操作我只在如上系统操作,仅供参考

1.安装GraphicsMagick

GraphicsMagick 是配合im4java使用的图片处理软件,在linux/windows下均能使用。在ubuntu下安装很简单:
apt-get install graphicsmagick
 yum -y install GraphicsMagick GraphicsMagick-devel (Centos安装方法)
然后运行 man gm,如果显示graphicsmagick的manual,则证明graphicsmagick安装成功。

2.安装lua_nginx

下载 LuaJIT-2.0.3.tar.gz  http://luajit.org/download.html

tar -zxvf LuaJIT-2.0.3.tar.gz
cd LuaJIT-2.0.3/
make && make install
所以lib和include是直接放在/usr/local/lib和usr/local/include

3.安装nginx以及需要安装模块

查看现有版本号 nginx -v

下载nginx源码,解压
wget http://www.nginx.org/download/nginx-1.7.3.tar.gz

tar -zxvf nginx-1.7.3.tar.gz

下载ngx_devel_kit HERE 解压

https://github.com/simpl/ngx_devel_kit/tags

tar -zxvf ngx_devel_kit-0.2.19.tar.gz

下载nginx_lua_module HERE 解压
https://github.com/chaoslawful/lua-nginx-module/tags

tar -zxvf lua-nginx-module-0.9.5rc2.tar.gz

下载ngx_cache_purge-1.0.tar.gz

http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz

tar -zxvf ngx_cache_purge-1.0.tar.gz

PS:

这里cache模块最好一起和lua进行编译安装避免后期不必要的麻烦

导入环境变量,编译
vi /etc/profile

export LUAJIT_LIB=/usr/local/lib    #这个很有可能不一样
export LUAJIT_INC=/usr/local/include/luajit-2.0  #这个很有可能不一样

是文件环境变量生效

source /etc/profile

cd nginx-1.7.3

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module --with-cc-opt=‘-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2‘ --with-ld-opt=‘-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-rpath,$LUAJIT_LIB‘ --with-ipv6 --add-module=/root/ngx_devel_kit-0.2.19 --add-module=/root/lua-nginx-module-0.9.5rc2

--add-module=/path/to/ngx_devel_kit    #ngx_devel_kit 的源码路径
--add-module=/path/to/lua-nginx-module  #nginx_lua_module 的源码路径

--add-module=/path/to/ngx_cache_purge-1.0.tar.gz

make -j2
make install

报错:

安装nginx报错没有找到pcre包

解决办法:

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载pcre模块
编译nginx的时候添加--with-pcre=pcre源码path

****************************************************************************
这种解决pcre方法网上说,但是我按照安装出错提示,直接指定源码文件  *
安装 pcre报错                                                                                    *
checking windows.h usability... no                                                       *
checking windows.h presence... no                                                     *
checking for windows.h... no                                                              *
configure: error: You need a C++ compiler for C++ support.                   *
解决办法:                                                                                         *
apt-get install build-essential                                                               *
继续安装pcre 继续安装nginx                                                                 *
--with-pcre=pcar-path                                                                         *
编译再次出错:                                                                                   *
checking for OpenSSL library ... not found                                            *
****************************************************************************

继续报错:

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
解决办法:
apt-get install libssl-dev
apt-get install openssl
安装成功

4.测试nginx-lua模块安装是否成功

在nginx的配置文件server模块添加

location /hello {
      default_type ‘text/plain‘;
      content_by_lua ‘ngx.say("hello, lua")‘;
}

启动测试报错:
nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

我在网上寻找解决办法,找了三个办法 直接使用方法三,如果还是依旧报错在使用方法一

===========================================================================================

解决方法一
在 Nginx 编译时,需要指定 RPATH,加入下面选项即可:
./configure --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" 
或者 
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

vi /etc/profile
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

source /etc/profile

解决方法二:
# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

解决方法三: 这才搞定
http://www.mirrtalk.net/?p=759

#ln -s /usr/local/lib/libluajit-5.1.so.2 /usr/lib/libluajit-5.1.so.2
#ln -s /usr/local/lib/libluajit-5.1.so.2.0.2 /usr/lib/libluajit-5.1.so.2.0.2

再次nginx –t 检查nginx配置  OK

===========================================================================================

4.安装lua

PS:如果上面安装了luaJit这里依旧需要安装lua,原因还没深究

首先安装lua的依赖包

sudo apt-get install libreadline5
apt-get install libreadline-gplv2-dev

下载lua源码

http://download.csdn.net/detail/xinsir88/7694571

tar -zxvf lua-5.2.3.tar.gz

cd lua-5.2.3/
make linux
make install

5.配置

nginx nginx-lua GraphicsMagick ngx_cache_purge安装完毕后,我们来修改配置文件 如下:

添加三个个location
第一个location用作图片,第二个location用作html,第三个location用作承接第一个location,第四个location用作承接第三location 内容如下:

server {
    listen       80;
    server_name  localhost;

root   /usr/share/nginx/html;
        index  index.html index.htm;
    location / {
    }

############################################################################################
location /images/ {

set $image_root /usr/local/tfsimage;

if ($uri ~* "/images/([0-9a-zA-Z_]+).(([^.]+).*)") {
       set $filePath "$image_root/$1.$2";
       set $reqPath  "/$1.$2";
       set $filename "$1.$3";
    }

set $file "$image_root$reqPath";
   set $fileone "$image_root/$filename";
    if (-f $file) {
       rewrite "/images/(.+)" /innerImages$reqPath last;
   }

if (!-f $file){
rewrite_by_lua ‘



//为了避免在nginx服务器上产生太多垃圾图片,在下载原图时先进行判断

function file_exists(name)  //定义方法file_exists
      local f=io.open(name,"r")
      if f~=nil then io.close(f) return true else return false end
      end ;

if file_exists(ngx.var.fileone) then print("111") else  //调用方法file_exists

command = string.format("wget -P /usr/local/tfsimage/http://192.168.1.230/v1/tfs/"..ngx.var.filename)  //定义下载命令
        os.execute(command)//执行下载命令
       end;



local originalUri;
                  local area;
                  local index = string.find(ngx.var.filePath, "([0-9]+)x([0-9]+)");
                  if index==nil then     originalUri = ngx.var.filePath;
                  else
           originalUri = string.sub(ngx.var.filePath, 0, index-2);
           area = string.sub(ngx.var.filePath, index);
          index = string.find(area, "([.])");
          area = string.sub(area, 0, index-1);
          end
          local image_sizes = {"155x155", "400x400","104x104", "50x50", "40x40", "56x56", "172x172","800x600"};
          function table.contains(table, element)
             for _, value in pairs(table) do
                if value == element then
                   return true
                end
             end
             return false
          end

if table.contains(image_sizes, area) then
             local command = "gm convert " ..  originalUri  .. " -thumbnail " .. area .. " -background white -gravity center -extent " .. area .. " " .. ngx.var.file;
             os.execute(command);
             ngx.req.set_uri("/innerImages" .. ngx.var.reqPath, true);
          else
             ngx.req.set_uri("/innerImages" .. ngx.var.reqPath, true);
          end;
      
       ‘;
    }
}

location  /html/ {

set $image_root /usr/local/tfshtml;

if ($uri ~* "/html/([0-9a-zA-Z]+).(.*)") {
       set $filePath "$image_root/$1.$2";
       set $reqPath  "/$1.$2";
    }

if (-f $filePath) {  
        rewrite "/html/(.+)" /innerhtml$reqPath last;
    }

//由于html不涉及到原文件的问题我们就不做判断性下载

if (!-f $filePath) {
       rewrite_by_lua ‘ 
        command = string.format("wget -P /usr/local/tfshtml/ http://192.168.1.230/v1/tfs/"..ngx.var.reqpath);
        os.execute(command);
        ngx.req.set_uri("/innerhtml" .. ngx.var.reqPath, true);

‘;
    }
}

location /innerImages {
   alias /usr/local/tfsimage;
   expires max;
tcp_nodelay off;
tcp_nopush on;
}

location /innerhtml {
   alias /usr/local/tfshtml;
   expires max;
tcp_nodelay off;
tcp_nopush on;
}
##############################################################################################
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

nginx+lua_nginx+GraphicsMagick缩略图+tfs获取原图+ngx_cache_purge

时间: 2024-10-13 04:32:02

nginx+lua_nginx+GraphicsMagick缩略图+tfs获取原图+ngx_cache_purge的相关文章

ftp+nginx+lua_Nginx+GraphicsMagick来实现目录浏览、实时缩略图

一.FTP服务器安装配置 1.rpm -ivh vsftpd-2.2.2-11.el6_4.1.i686.rpm 2.service vsftpd start 3.chkconfig vsftpd on 4.配置 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak vim /etc/vsftpd/vsftpd.conf 12 anonymous_enable=NO 禁止匿名访问...121 chroot_local_user=yes 禁锢

Nginx+lua_Nginx+GraphicsMagick来实现实时缩略图

1.安装GraphicsMagick cd /usr/local/src wget http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.20/GraphicsMagick-1.3.20.tar.gz/download tar -zxvf GraphicsMagick-1.3.20.tar.gz cd GraphicsMagick-1.3.20 ./configure --prefix=/usr/local

nginx+lua_nginx+GraphicsMagick生成实时缩略图

暂做笔记,带后续验证通过后,再补充 1.2.3 步. 一.安装 lua 二.安装 GraphicsMagick 三.安装nginx 四.配置 nginx nginx.conf http { lua_package_path '/usr/local/openresty/nginx/lua/?.lua;;'; server { listen 80; server_name img.rhythmk.org; root /home/wwwroot/static/image; #对类似_100x100.g

nginx+lua+GraphicsMagick生成实时缩略图-CentOS7

背景 大多数的系统都会涉及缩略图的处理,比如新闻系统和电商系统,特别是电商系统,每个商品大图都会对应一系列尺寸的缩略图用于不同业务场景的使用.部分系统也会生成不同尺寸的缩略图以供PC.手机端.ipad端使用. 解决方案探索: 直接加载原图,使用css样式表来控制图片的宽高.显然不太合适,大家也尽量不要这样做. web程序在上传成功后,同时生成相应缩略图.这种做法效率较低,如果遇到批量导入的业务时严重影响性能.并且同步生成缩略图会占用一定量的存储空间,如果能按需生成岂不更好? 使用七牛.阿里云提供

使用nginx+lua+GraphicsMagick实现图片自动 裁剪

在做网站尤其是以内容为主的过程中,常常会遇到一张图片各种地方都要引用,且每个引用的地方要求的图片尺寸都不一样的.一般中大型的网站都会对这一类的图片做自动裁剪功能.本文介绍在centos6操作系统上,采用nginx.lua和GraphicsMagick工具简单实现图片的自动裁剪功能.其中nginx负责展示图片和调度lua脚本,GraphicsMagick负责对原图进行裁剪. 一.基础软件包安装groupadd wwwuseradd -g www www -s /bin/falseyum -y in

android 调用系统相机拍照 获取原图

好吧,为了这个问题又折腾了一整天.之前在网上找来的方法,如果在onActivityResult中直接用data.getData()的方式来生成bitmap,其实获取的是拍照生成的缩略图!看看尺寸就知道了.如果要获取原图,还需要一番折腾(特别是对于手里这个Samsung i9000)——之前朋友在不同的机型上使用的方法在我这里一直报错,且属于那种uncaught的错误-.- 话说回来,具体的折腾方法如下(如果不幸你看到了,希望不要“折疼了”): 在拍照的出发按钮的点击事件中写入如下代码: toCa

不使用UIImagePickerControllerOriginalImage获取原图

一般用imagePickerController获取到dic以后常用的方法是使用 UIImage *image = [dic objectForKey:@"UIImagePickerControllerOriginalImage"]; 来获取原图,但是我使用这个方法获取到得图片并不是原图,而是尺寸经过压缩后的,后来找到了一个新的方法来进行获取 直接贴代码 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [librar

OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能

http://www.hopesoft.org/blog/?p=1188 2.用法 原始图片是input.jpg,尺寸:160×120 1)只缩小不放大 1 gm convert input.jpg -resize "500x500>" output_1.jpg 加了>,表示只有当图片的宽与高,大于给定的宽与高时,才进行“缩小”操作.生成的图片大小是:160×120,未进行操作如果不加>,会导致图片被比等放大. 2)等比缩图 (缺点:产生白边) 1 gm conver

nginx实时生成缩略图到硬盘上

原文:http://www.ttlsa.com/nginx/nginx-create-image-on-disk/ 现在随着各终端的出现(手机,ipad等平板),以及各种终端的手机分辨率和尺寸都不同,现在手机用户流量都是宝,网上出现了各种各样的生成缩略图功能的架构,有使用php实时生成缩略图的,也有用nginx + lua实现的,上节我也讲到了使用nginx生成缩略图,但是用户每次访问都需要生成一次,会给cpu和硬盘带来比较大的压力,今天带来了另外一种方式,这次使用nginx将原图生成缩略图到硬