nginx+lua_nginx+GraphicsMagick生成实时缩略图
安装graphi magic
wget http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.16/GraphicsMagick-1.3.16.tar.gz/download
./configure --prefix=/usr/local/GraphicsMagick-1.3.16
make;make install
安装nginx需要的模块如下
liujit http://luajit.org
ngx_devel_kit https://github.com/simpl/ngx_devel_kit
echo-nginx-module https://github.com/agentzh/echo-nginx-module
lua-nginx-module https://github.com/chaoslawful/lua-nginx-module
wget http://nginx.org/download/nginx-1.2.1.tar.gz
设置环境变量
export LUAJIT_LIB=/usr/local/lj2/lib
export LUAJIT_INC=/usr/local/lj2/include/luajit-2.0
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
GM_HOME=/usr/local/GraphicsMagick-1.3.16;
PATH=$GM_HOME/bin:$PATH;
export PATH
export GM_HOME
使环境变量生效:source /etc/profile
编译参数:
--prefix=/usr/local/nginx --user=tomcat --with-http_stub_status_module --add-module=/usr/src/simpl-ngx_devel_kit-4192ba6 --with-ld-opt=-Wl,-rpath,/usr/local/lj2/lib --add-module=/usr/src/ngx_cache_purge-1.6 --with-http_perl_module --add-module=/usr/src/chaoslawful-lua-nginx-module-936653c --add-module=/usr/src/agentzh-echo-nginx-module-b3ad5c1
注意:图片存储目录的用户需要跟nginx运行用户是同一用户,否则会出现缩略图文件不可写情况
lua模块测试
nginx.conf配置
location /lua1 {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
location /image {
set $image_root /mnt/mfs/web/sq/webroot;
set $file "$image_root$uri";
if (!-f $request_filename) {
rewrite_by_lua '
local index = string.find(ngx.var.uri, "([0-9]+)x([0-9]+)");
local originalUri = string.sub(ngx.var.uri, 0, index-2);
local area = string.sub(ngx.var.uri, index);
index = string.find(area, "([.])");
area = string.sub(area, 0, index-1);
local image_sizes = {"140x140", "800x800", "90x90"};
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 = "/usr/local/GraphicsMagick-1.3.16/bin/gm convert " .. ngx.var.image_root .. originalUri .. " -thumbnail " .. area .. " -gravity center -extent " .. area .. " " .. ngx.var.file;
os.execute(command);
else
ngx.exit(401);
end;
';
}
alias /mnt/mfs/web/sq/webroot/image/;
expires 7d;
}
访问图片在原图片url后加.140x140.jpg