Tengine+Lua+GraphicsMagick实现图片自动伸缩功能(ubuntu)

配置环境

支持软件

apt-get install libreadline-dev
apt-get install libpcre3 libpcre3-dev
apt-get install openssl 
apt-get install libssl-dev

sudo apt-get install libjpeg8
sudo apt-get install libjpeg-dev

sudo apt-get install libpng12-0
sudo apt-get install libpng12-dev

sudo apt-get install giflib-tools

sudo apt-get install libfreetype6

下载这些包
每个包的解释:
GraphicsMagick-1.3.30.tar.gz      剪切图片工具本体,只能以命令执行
lua-5.3.1.tar.gz   脚本工具,用于调用剪切图片工具
LuaJIT-2.0.4.tar.gz  脚本工具的环境支持
tengine-master.tar.gz          tengine本体,其实就是阿里整合nginx+lua的,能支持lua工具

安装顺序 脚本工具→图片剪切工具→tengine本体 
安装方法:
1.先解压编译压缩包:   tar -zxvf 包名
2.进入解压包后的文件夹:  cd 文件夹名
3.编译文件:   make
    3.1若是安装lua-5.3.1的指令是 : make linux
    3.2若是安装tengine或GraphicsMagick需要先执行 chmod 777 ./configure       再执行./configure    最后再make
    3.2.2安装tengine指令

cd tengine-master/
sudo chmod 777 ./configure
./configure --prefix=/usr/local/Tengine --dso-path=/usr/local/Tengine/modules --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

   3.2.3安装GraphicsMagick执行

tar -zxvf GraphicsMagick-1.3.30.tar.gz 
cd GraphicsMagick-1.3.30
./configure --prefix=/usr/local/GraphicsMagick --enable-shared


4.安装:  make install

4.1在Tengine中创建lua脚本文件

这个文件中能配置裁剪图片的具体参数等信息

创建lua文件夹

mkdir -p /usr/local/Tengine/lua

把ImageResizer.lua扔进去
再设置一下权限
chmod 777 /usr/local/Tengine/lua/ImageResizer.lua 

安装tengine完之后ubuntu64位系统的会有一个BUG需要修复

报错:

找不到libluajit-5.1.so.2库
[root@localhost tengine-master]# /usr/local/Tengine/sbin/nginx
/usr/local/Tengine/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

linux64位常见问题,找到缺失的库的位置,做一个软链到lib64文件夹下就行

先获取文件位置

whereis libluajit-5.1.so.2

制作软链,执行后没有提示信息,如果想看到效果可以到lib64文件夹下看看是否存在libluajit-5.1.so.2文件

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

PS:上面的格式是In -s 你刚获取到的文件位置  /lib64/libluajit-5.1.so.2

报错:
nginx: [emerg] mkdir() "/var/tmp/Tengine/client_body_temp" failed (2: No such file or directory)

原因是文件夹找不到之前执行配置文件的时候,设置的这个文件夹在系统中不存在

手动创建对应的文件夹,执行完也是没有成功提示,可以自行进到目录中查看

mkdir -p /var/tmp/Tengine/client_body_temp

最后的最后也是配置的关键,前面都只是搭建环境而已

修改/usr/local/Tengine/conf/nginx.conf
可以先修改一下权限,允许所有用户直接编辑(不习惯用vi)    chmod a+rwx filename
开始修改


#user  nobody;
#剪切工具必须要root用户才有权限使用
user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

# load modules compiled as Dynamic Shared Object (DSO)
#
#dso {
#    load ngx_http_fastcgi_module.so;
#    load ngx_http_rewrite_module.so;
#}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
	#这里我是拦截/pic即网络访问路径是 localhost/pic
	location /pic {
          #也可以使用alias,alias就不会将拦截路径自动添加进来。
	  #root比较鬼畜,它会将你上面配置的拦截自动加到路径内,即 localhost/demo/pic  demo文件是我直接放在nginx下的详细路径是/usr/local/Tengine/demo/pic/
	  root   demo/;
	  #我的首页放在/usr/local/Tengine/demo/pic/index.html,测试的图片与其同级!
	  index  index.html;
          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)$ {
	#这里必须设置,找不到要剪切文件的路径,如:图片所在路径是/usr/local/Tengine/demo/pic/1.jpg 必须要先指定根目录在哪,否则你在var/log/nginx/error文件里面看报错的路径来调了
           root demo;
           if (!-f $request_filename) { #如果文件不存在时才需要裁剪
              add_header X-Powered-By 'Lua GraphicsMagick';  #此HTTP Header无实际意义,用于测试
              add_header file-path $request_filename;  #此 HTTP Header无实际意义,用于测试
              lua_code_cache on;  #在编写外部 Lua脚本时,设置为off Nginx不会缓存 Lua,方便调试
              set $request_filepath /usr/local/Tengine/demo$1;  #设置被剪切的图片文件地址(到图片的文件夹)
              set $width $3;     # 设置裁剪/缩放的宽度
              set $height $4;    # 设置裁剪/缩放的高度
              set $ext $5;      # 图片文件格式后缀
              content_by_lua_file /usr/local/Tengine/lua/ImageResizer.lua;  #加载外部 Lua 文件,就是上面配置的ImageResizer.lua,作用是执行图片剪切工具的脚本
            }
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }



}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值