-
互联网电商网站( PC、移动)
-
大量不同需求的图片(同一个图片需要不同尺寸的缩略图)
两种策略生成缩略图
-
在上传图片时,就生成所需缩略图
-
根据请求指定尺寸的图片自动生成相应的缩略图片
Tengine+Lua+GraphicsMagick
| 软件名称 | 安装包 | 下载地址 |
|---|---|---|
| Tengine | tengine-master.zip | https://github.com/alibaba/tengine |
| Lua | lua-5.3.1.tar.gz LuaJIT-2.0.4.tar.gz(Lua依赖包) | http://www.lua.org/ftp/ http://luajit.org/download.html |
| GraphicsMagick | GraphicsMagick-1.3.18.tar.gz | https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/ |
# 使用阿里下载源 [root@desktop-dm818pf ~]# wget -O /etc/yum.repos.d/CentOS-base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@desktop-dm818pf ~]# yum makecache # 安装依赖包和类库 [root@desktop-dm818pf ~]# yum install -y libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel3、安装Lua (1)安装依赖
[root@desktop-dm818pf ~]# yum install -y readline readline-devel gcc gcc-c++ pcre-devel openssl-devel zlib-devel(2)安装Lua(源码编译安装)
[root@desktop-dm818pf ~]# tar zxvf lua-5.3.1.tar.gz [root@desktop-dm818pf ~]# cd lua-5.3.1 [root@desktop-dm818pf lua-5.3.1]# make linux [root@desktop-dm818pf lua-5.3.1]# make install(3)安装LuaJIT(源码编译安装)
[root@desktop-dm818pf ~]# tar zxvf LuaJIT-2.0.4.tar.gz [root@desktop-dm818pf ~]# cd ~/LuaJIT-2.0.4/ [root@desktop-dm818pf LuaJIT-2.0.4]# make [root@desktop-dm818pf LuaJIT-2.0.4]# make install(4)查看Lua版本
[root@bogon LuaJIT-2.0.4]# lua -v Lua 5.3.1 Copyright (C) 1994-2015 Lua.org, PUC-Rio4、安装Tengine
进入Tengine源码目录,使用configure配置安装路径以及需要安装的模块
[root@desktop-dm818pf ~]# unzip tengine-master.zip [root@desktop-dm818pf ~]# cd tengine-master/ [root@desktop-dm818pf tengine-master]# ./configure --prefix=/usr/local/Tengine --dso-path=/usr/local/Tengine/modules --with-ipv6 --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_concat_module --with-http_lua_module --http-proxy-temp-path=/var/tmp/Tengine/proxy_temp --http-fastcgi-temp-path=/var/tmp/Tengine/fastcgi_temp --http-uwsgi-temp-path=/var/tmp/Tengine/uwsgi_temp --http-scgi-temp-path=/var/tmp/Tengine/cgi_temp --http-client-body-temp-path=/var/tmp/Tengine/client_body_temp --http-log-path=/var/log/Tengine/access.log --error-log-path=/var/log/Tengine/error.log
安装Tengine (源码编译安装)
[root@desktop-dm818pf tengine-master]# make && make install
配置tengine环境变量
[root@desktop-dm818pf tengine-master]# vim /etc/profile # 增加tengine的环境变量 export tengine_home=/usr/local/Tengine export PATH=$PATH:$tengine_home/sbin [root@desktop-dm818pf tengine-master]# source /etc/profile
启动tengine
[root@desktop-dm818pf ~]# nginx # 修复错误 [root@desktop-dm818pf ~]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/ [root@desktop-dm818pf ~]# nginx #创建目录 [root@desktop-dm818pf ~]# mkdir -p /var/tmp/Tengine/client_body_temp [root@desktop-dm818pf ~]# nginx [root@desktop-dm818pf ~]# curl http://localhost5、安装GraphicsMagick
安装依赖包和类库
[root@desktop-dm818pf ~]# yum install -y libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel #解压GraphicsMagick压缩包 [root@desktop-dm818pf ~]# tar zxvf GraphicsMagick-1.3.18.tar.gz [root@desktop-dm818pf ~]# cd GraphicsMagick-1.3.18/ [root@desktop-dm818pf GraphicsMagick-1.3.18]# ./configure --prefix=/usr/local/GraphicsMagick --enable-shared [root@desktop-dm818pf GraphicsMagick-1.3.18]# make && make install #查看版本信息 [root@desktop-dm818pf GraphicsMagick-1.3.18]# /usr/local/GraphicsMagick/bin/gm version6、配置Lua脚本文件
文件名:ImageResizer.lua
位置:/usr/local/Tengine/lua/ImageResizer.lua
权限:可执行
chmod 777 /usr/local/Tengine/lua/ImageResizer.lua
文件内容:
#注意GM安装目录 local command = "/usr/local/GraphicsMagick/bin/gm convert " .. ngx.var.request_filepath .. " -resize " .. ngx.var.width .. "x" .. ngx.var.height .. " +profile "*" " .. ngx.var.request_filepath .. "_" .. ngx.var.width .. "x" .. ngx.var.height .. "." .. ngx.var.ext; os.execute(command); ngx.exec(ngx.var.request_uri);7、Tengine配置
文件名:nginx.conf
位置:/usr/local/Tengine/conf/nginx.conf
文件内容:
#注意 需要将原有的server模块进行注释
# user root 需要放到最外层
user root;
# 新增一个server块
server {
listen 80;
server_name img.itrip.project.bdqn.cn;
root /data/itrip/uploadimg;
location / {
root /data/itrip/uploadimg; # 站点根目录
expires 1h; # 缓存时间
add_header Cache-Control max-age=3600; # 缓存时间
access_log /var/log/Tengine/host_access.log;
}
# 如果 url 格式如:xxxx.gif_数字x数字.gif
location ~* ^(.+.(jpg|jpeg|gif|png))_(d+)x(d+).(jpg|jpeg|gif|png)$ {
# 这里必须设置,否则根目录,
# 即 $document_root 会是 Nginx 默认的 Nginx Root/html,在 Lua 中会得不到期望的值
root /data/itrip/uploadimg;
# 如果文件不存在时才需要裁剪
if (!-f $request_filename) {
# 此HTTP Header无实际意义,用于测试
add_header X-Powered-By 'Lua GraphicsMagick';
# 此 HTTP Header无实际意义,用于测试
add_header file-path $request_filename;
# 在编写外部 Lua脚本时,设置为off Nginx不会缓存 Lua,方便调试
lua_code_cache on;
# 设置原始图片路径,如:/document_root/1.gif
set $request_filepath /data/itrip/uploadimg$1;
set $width $3; # 设置裁剪/缩放的宽度
set $height $4; # 设置裁剪/缩放的高度
set $ext $5; # 图片文件格式后缀
# 加载外部 Lua 文件
content_by_lua_file /usr/local/Tengine/lua/ImageResizer.lua;
}
}
}
创建站点目录:
mkdir -p /data/itrip/uploadimg
重启nginx:
nginx -s reload三、功能测试
上传图片到站点目录/data/itrip/uploadimg
[root@desktop-dm818pf ~]# tree /data/itrip/uploadimg /data/itrip/uploadimg ├── 111.jpg
在浏览器地址栏输入一下内容:
http://localhost/111.jpg_800x480.jpg
自动在站点目录下生成以111.jpg为原图的800x400的缩略图。
[root@desktop-dm818pf ~]# tree /data/itrip/uploadimg /data/itrip/uploadimg ├── 111.jpg └── 111.jpg_800x480.jpg



