搭建带lua模块的nginx调用ImageMagick工具实现实时剪切缩放图片功能

简介:

一、安装LuaJIT。

wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz

tar xf LuaJIT-2.0.5.tar.gz 

cd LuaJIT-2.0.5

make

make install

设置环境变量,设置后不要切换控台,否则会失效。

export LUAJIT_LIB=/usr/local/lib

export LUAJIT_INC=/usr/local/include/luajit-2.0

做软链接,并加载模块

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

ldconfig


二、安装ImageMagick工具。

用yum装就行了,挺方便的。

yum install -y ImageMagick


三、下载nginx以及ngx_devel_kit和nginx_lua_module模块,解压到指定路径。如果本机已装有nginx请忽略下载安装nginx。

wget http://nginx.org/download/nginx-1.12.0.tar.gz

wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc5.tar.gz

tar xf nginx-1.12.0.tar.gz && tar xf v0.3.0.tar.gz && tar xf v0.10.9rc5.tar.gz


四、编译安装nginx,如果本机已装有nginx请忽略安装,但需要重新编译,然后将老nginx执行文件备份,并把新的弄过去。

./configure --prefix=/usr/local/nginx \

--add-module=(你的解压路径)/ngx_devel_kit-0.3.0 \

--add-module=(你的解压路径)/lua-nginx-module-0.10.9rc5

(本机如果已经装了nginx的,要把你nginx曾经编译的参数也加上)

make

没有装nginx的,直接make install装了的,参考http://zhukeqiang.blog.51cto.com/8692790/1847357

进行nginx执行文件的替换。


五、验证nginx是否已经加上了两个新模块。

/usr/local/nginx/sbin/nginx -V


六、编写nginx配置文件。以下内容可供参考。

location ~ '/pdgpath/([0-9a-z_]+).jpg$' {

            root   /opt/qikanjpg;

        }


location ~ '/pdgpath/([0-9a-z_]+)\@([0-9]+)x([0-9]+)\.(gif|jpg|png|jpeg)$' {

root /opt/qikanjpg;

set $image_root '/opt/qikanjpg/pdgpath';

set $fileName $1;

set $width $2;

set $height $3;

set $origin $image_root/$fileName.jpg;

set $file_1 $image_root/${fileName}@${width}x${height}.jpg;


if (!-f $file_1) {

rewrite_by_lua '

local comd = "convert -sample "..ngx.var.width.."x"..ngx.var.height.." "..ngx.var.origin.." "..ngx.var.file_1;

   os.execute(comd);

';

}

}


location ~ '/pdgpath/([0-9a-z_]+)\@([0-9]+)x([0-9]+)_f\.(gif|jpg|png|jpeg)$' {

root /opt/qikanjpg;

    set $image_root '/opt/qikanjpg/pdgpath';

set $fileName $1;

set $width $2;

set $height $3;

set $origin $image_root/$fileName.jpg;

set $file $image_root/${fileName}@${width}x${height}_f.jpg;


if (!-f $file) {

rewrite_by_lua '

local command = "convert -strip -quality 80% -resize "..ngx.var.width.."x"..ngx.var.height.."^ -gravity center -crop "..ngx.var.width.."x"..ngx.var.height.."+0+0 "..ngx.var.origin.." "..ngx.var.file;

            os.execute(command);

';

}

}


七、访问图片,进行测试。

以上面的配置文件,在/opt/qikanjpg/pdgpath/放一个1.jpg。

原图http://(your_server_ip):(your_server_port)/pdgpath/1.jpg

按宽和高较小值等比缩放原图http://(your_server_ip):(your_server_port)/pdgpath/1@宽x高.jpg

按宽和高较大值等比缩放原图再从中间切一次宽和高那么大一个区域http://(your_server_ip):(your_server_port)/pdgpath/1@宽x高_f.jpg


更多的切割功能,请convert --help查看自行琢磨,然后添加到local command =里面就行了。



本文转自 朱科强 51CTO博客,原文链接:http://blog.51cto.com/zhukeqiang/1937416,如需转载请自行联系原作者

相关文章
|
3月前
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
465 2
|
28天前
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
|
1月前
|
负载均衡 安全 应用服务中间件
nginx的强大功能和如何使用?
nginx的强大功能和如何使用?
60 2
|
1月前
|
tengine 负载均衡 应用服务中间件
类似nginx的工具还有什么?
类似nginx的工具还有什么?
397 1
|
1月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
31 0
|
3月前
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
170 1
|
3月前
|
负载均衡 应用服务中间件 Linux
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
|
3月前
|
缓存 前端开发 应用服务中间件
Nginx:location配置模块的用法(二)
Nginx:location配置模块的用法(二)
119 2
|
3月前
|
运维 算法 应用服务中间件
运维系列.Nginx中使用HTTP压缩功能(一)
运维系列.Nginx中使用HTTP压缩功能(一)
68 1
|
3月前
|
缓存 负载均衡 安全
介绍一下Nginx的反向代理功能吧
【8月更文挑战第22天】介绍一下Nginx的反向代理功能吧
68 0
下一篇
无影云桌面