Tengine+Lua+GraphicsMagick實現圖片自動伸縮功能(ubuntu)
Tengine+Lua+GraphicsMagick實現圖片自動伸縮功能(ubuntu)
個人分類: 學習
配置環境
支援軟體
apt-get install libreadline-dev
apt-get install libpcre3 libpcre3-dev
apt-get install openssl
apt-get install libssl-dev
下載這些包
每個包的解釋:
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
安裝圖片剪下工具支援剪下(jpg,png)的外掛支援
-
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
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庫
[[email protected] 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 /lib64/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/pic$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;
-
}
-
}
-
}