如何安裝nginx_lua_module模塊,升級nginx,nginx-lua-fastdfs-GraphicsMagick動態生成縮略圖,實現圖片自動裁剪縮放


如何安裝nginx_lua_module模塊,升級nginx,nginx-lua-fastdfs-GraphicsMagick動態生成縮略圖,實現圖片自動裁剪縮放

參考網站:
nginx-lua-fastdfs-GraphicsMagick
https://github.com/hpxl/nginx-lua-fastdfs-GraphicsMagick
如何安裝nginx_lua_module模塊 - 軒脈刃 - 博客園
http://www.cnblogs.com/yjf512/archive/2012/03/27/2419577.html
如何升級Nginx到最新穩定版 - Terry Sun - 博客園
http://www.cnblogs.com/terrysun/archive/2012/11/22/2782472.html
GraphicsMagick / ImageMagick缺少lib報錯no decode delegate for this image format - Arliang - 博客園
http://www.cnblogs.com/arliang/archive/2013/06/24/fix_error_no_decode_delegate_for_this_image_format.html
GraphicsMagick在Linux環境的安裝 - - ITeye技術網站
http://zhenghuali168.iteye.com/blog/1441926

Tengine + Lua + GraphicsMagick 實現圖片自動裁剪/縮放 - 騰勇的個人頁面 - 開源中國社區
http://my.oschina.net/eduosi/blog/169606?fromerr=WtR4O29O

第一章 安裝Nginx+Lua開發環境 - 開濤的博客 - ITeye技術網站
http://jinnianshilongnian.iteye.com/blog/2186270

安裝Nginx+Lua+OpenResty開發環境配置全過程實例 - 流風,飄然的風 - 博客園
http://www.cnblogs.com/zdz8207/p/Nginx-Lua-OpenResty.html

=========================================

nginx-lua-fastdfs-GraphicsMagick

fastdfs開源的分布式文件系統,此腳本利用nginx lua模塊,動態生成圖片縮略圖,fastdfs只存一份原圖。lua通過socket獲取fastdfs的原圖,並存放到本地,根據不同規則url,例如:_60x60.jpg、_80x80.jpg,類似淘寶圖片url規則。利用gm命令生成本地縮略圖,第二次訪問直接返回本地圖片。定時任務凌晨清除7天內未訪問的圖片,節省空間。

圖片訪問舉例

  1. http://192.168.1.113/group1/M00/00/00/wKgBcVN0wDiAILQXAAdtg6qArdU189.jpg
  2. http://192.168.1.113/group1/M00/00/00/wKgBcVN0wDiAILQXAAdtg6qArdU189.jpg_80x80.jpg
  3. http://gi1.md.alicdn.com/imgextra/i1/401612253/T2ASPfXE4XXXXXXXXX_!!401612253.jpg_60x60.jpg
  4. http://gi1.md.alicdn.com/imgextra/i1/401612253/T2ASPfXE4XXXXXXXXX_!!401612253.jpg_80x80.jpg

參考網址

  1. https://github.com/openresty/lua-nginx-module
  2. https://github.com/azurewang/Nginx_Lua-FastDFS
  3. https://github.com/azurewang/lua-resty-fastdfs
  4. http://rhomobi.com/topics/23
  5. http://bbs.chinaunix.net/thread-4133106-1-1.html

=========================================

如何安裝nginx_lua_module模塊

1.檢查已經裝的nginx路徑和版本:
root@ip82:/home/user# find /|grep nginx.conf
/etc/nginx/conf/nginx.conf
root@ip82:/etc/nginx/conf# /etc/nginx/sbin/nginx -v
nginx version: nginx/1.1.19
注:如果是nginx1.6以下是版本先看下面升級nginx的方法先升級,否則安裝不了

2.下載luajit 2.0.3並安裝
root@ip82:/home/user# wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz
root@ip82:/home/user# tar -zxvf LuaJIT-2.0.3.tar.gz
root@ip82:/home/user# cd LuaJIT-2.0.3
root@ip82:/home/user/LuaJIT-2.0.3# make && make install

3.下載ngx_devel_kit http://github.com/simpl/ngx_devel_kit/tags 解壓
root@ip82:/home/user# wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
root@ip82:/home/user# tar -zxvf v0.2.19.tar.gz

4.下載nginx_lua_module http://github.com/chaoslawful/lua-nginx-module/tags 解壓
root@ip82:/home/user# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.0.tar.gz
root@ip82:/home/user# tar -zxvf v0.10.0.tar.gz
root@ip82:/home/user# ls
fdfs-wnw fdfs_wnw.tgz install_log LuaJIT-2.0.3 LuaJIT-2.0.3.tar.gz lua-nginx-module-0.10.0 ngx_devel_kit-0.2.19 v0.10.0.tar.gz v0.2.19.tar.gz

5.導入環境變量,編譯用,LuaJIT默認安裝在(/usr/local/lib)
root@ip82:/home/user# ls /usr/local/lib
libfastcommon.so libfastcommon.so.1 libfdfsclient.so libfdfsclient.so.1 libluajit-5.1.a libluajit-5.1.so libluajit-5.1.so.2 libluajit-5.1.so.2.0.3 lua pkgconfig python2.7
root@ip82:/home/user# ls /usr/local/include/
fastcommon fastdfs luajit-2.0
root@ip82:/home/user# export LUAJIT_LIB=/usr/local/lib
root@ip82:/home/user# export LUAJIT_INC=/usr/local/include/luajit-2.0
上面方法的PATH 在終端關閉 后就會消失。
vim /etc/profile
在文檔最后,添加:
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
保存,退出,然后運行:
#source /etc/profile
不報錯則成功。

6.進入nginx源碼文件夾,增加編譯參數
root@ip82:/home/user# /etc/nginx/sbin/nginx -v
nginx version: nginx/1.1.19
root@ip82:/home/user# find /|grep nginx-1.1.19
root@ip82:/home/user# cd /home/user/fdfs-wnw/nginx-1.1.19/
root@ip82:/home/user/fdfs-wnw/nginx-1.1.19# ./configure --prefix=/etc/nginx --add-module=/home/user/ngx_devel_kit-0.2.19 --add-module=/home/user/lua-nginx-module-0.10.0

參數說明:
./configure --prefix=/etc/nginx \ #nginx的安裝路徑
--add-module=/home/user/ngx_devel_kit-0.2.19 \ #ngx_devel_kit 的源碼路徑
--add-module=/home/user/lua-nginx-module-0.10.0 #nginx_lua_module 的源碼路徑

7.執行安裝
root@ip82:/home/user/fdfs-wnw/nginx-1.1.19# make -j2
root@ip82:/home/user/fdfs-wnw/nginx-1.1.19# make install
發現nginx版本太低安裝不了,需要先升級
/home/user/lua-nginx-module-0.10.0/src/ngx_http_lua_common.h:26:2: error: #error at least nginx 1.6.0 is required but found an older version

版本太低,先進行下面步驟升級nginx

8.測試是否成功
root@ip82:/home/user/nginx-1.9.9# find /|grep nginx.conf
/etc/nginx/conf/nginx.conf
加入
location /lua {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
root@ip82:/usr/local/lib# /etc/nginx/sbin/nginx -t

root@ip82:/etc/nginx/conf# service nginx restart

訪問http://10.0.2.82/lua
會出現“hello,lua”
安裝成功!
=========================================
安裝GraphicsMagick依賴:
1.下載:GraphicsMagick:http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/
注意:這個下載很慢,需要對比下載的文件大小8.58M,有可能下載不完整導致解壓失敗
2.上傳解壓:tar -zxvf GraphicsMagick-1.3.23.tar.gz
到GraphicsMagick目錄下編譯:
cd /usr/local/share/GraphicsMagick-1.3.23
root@ip82:/usr/local/share/GraphicsMagick-1.3.23# ./configure --prefix=/usr/local/GraphicsMagick --enable-shared
root@ip82:/usr/local/share/GraphicsMagick-1.3.23# make
root@ip82:/usr/local/share/GraphicsMagick-1.3.23# make install
執行
root@ip82:/usr/local/share/GraphicsMagick-1.3.23# /usr/local/GraphicsMagick/bin/gm version
如果得到
Feature Support:
Native Thread Safe yes
Large Files (> 32 bit) yes
Large Memory (> 32 bit) yes
BZIP no
DPS no
FlashPix no
FreeType no
Ghostscript (Library) no
JBIG no
JPEG-2000 no
JPEG no
Little CMS no
Loadable Modules no
OpenMP yes (200805)
PNG no
TIFF no
TRIO no
UMEM no
WebP no
WMF no
X11 no
XML no
ZLIB yes

-------------------------------
JPEG yes
PNG yes
則,說明安裝成功!否則不成功

JPEG v1 --with-jpeg=yes no (需安裝 jpeg delegate library)
PNG --with-png=yes no(需安裝 png delegate library)

在執行完上述命令后會有一段輸出,可以查看GraphicsMagick支持的圖片格式,
在Configured value下為yes的表示為支持,PNG、JPEG v1和ZLIB必須為yes,若不為yes將按照前提中所寫的進行操作,然后再重復執行上述命令,一直到全部支持為止,否則將無法正常進行截圖操作

腳本編寫
// 調用 GraphicsMagick 進行圖片轉換,相關信息查看 GraphicsMagick 幫助文檔
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); // 輸出裁剪后的圖片
// ngx.var.request_filepath、ngx.var.width、ngx.var.height 即 Nginx location 中設置的變量

=========================================
GraphicsMagick / ImageMagick缺少lib報錯no decode delegate for this image format

#下載包
wget http://www.imagemagick.org/download/delegates/zlib-1.2.8.tar.gz
wget http://www.imagemagick.org/download/delegates/libpng-1.6.21.tar.gz
注:如果出現404說明已經升級了,到wget http://www.imagemagick.org/download/delegates/目錄下選擇最新版本下載,下面也同理
wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates/jpegsrc.v9a.tar.gz
tar zvxf zlib-1.2.8.tar.gz
tar zvxf libpng-1.6.21.tar.gz
tar zvxf jpegsrc.v9a.tar.gz

#安裝
cd zlib-1.2.8
./configure
make
make install

cd jpeg-9a
./configure
make
make install

cd libpng-1.6.21
./configure
make
make install
----------------------------------
root@ip82:/usr/local/share/GraphicsMagick-1.3.23# /usr/local/GraphicsMagick/bin/gm version
/usr/local/GraphicsMagick/bin/gm: error while loading shared libraries: libjpeg.so.9: cannot open shared object file: No such file or directory

find /|grep libjpeg.so

root@ip82:/usr/local/lib# cp libjpeg.so.9 /usr/lib/x86_64-linux-gnu/
root@ip82:/usr/local/lib# cp libjpeg.so.9.1.0 /usr/lib/x86_64-linux-gnu/
root@ip82:/usr/local/lib# cp libjpeg.so /usr/lib/x86_64-linux-gnu/
運行sudo ldconfig進行自動清理。
root@ip82:/usr/local/lib# sudo ldconfig
root@ip82:/usr/local/lib# /usr/local/GraphicsMagick/bin/gm version
Feature Support:
Native Thread Safe yes
Large Files (> 32 bit) yes
Large Memory (> 32 bit) yes
BZIP no
DPS no
FlashPix no
FreeType no
Ghostscript (Library) no
JBIG no
JPEG-2000 no
JPEG yes
Little CMS no
Loadable Modules no
OpenMP yes (200805)
PNG yes
TIFF no
TRIO no
UMEM no
WebP no
WMF no
X11 no
XML no
ZLIB yes

Host type: x86_64-unknown-linux-gnu

===========================================================
http://10.0.2.82/group1/M00/00/00/CgACUlalwCWAbKFfAAQA3nlGY5k195.jpg
http://10.0.2.82/group1/M00/00/00/CgACUlalwCWAbKFfAAQA3nlGY5k195.jpg_40x40.jpg

http://10.0.2.82/group1/M00/00/00/CgACUlbBe2aAAWgRAAJF3TQI0W8948.jpg
http://10.0.2.82/group1/M00/00/00/CgACUlbBe2aAAWgRAAJF3TQI0W8948.jpg_80x80.jpg

給相關目錄授權:
root@ip82:/etc/nginx/conf/lua# chown -R user:users /usr/local/GraphicsMagick
root@ip82:/etc/nginx/conf/lua# chmod 777 /usr/local/GraphicsMagick

測試gm命令是否正常:
gm convert -resize 100x80^ -gravity Center -crop 100x80+0+0 Hydrangeas.jpg thumb.jpg
其中Hydrangeas.jpg為執行命令目錄下的目標源文件 thumb.jpg為生成的圖片,生成后下載到本地查看算法正常。
/usr/local/GraphicsMagick/bin/gm convert -resize 80x80^ -gravity Center -crop 80x80+0+0 Hydrangeas.jpg thumb2.jpg

graphicsmagick獲得圖片的信息:
root@ip82:/etc/nginx/conf/lua# gm identify Hydrangeas.jpg
Hydrangeas.jpg JPEG 1024x768+0+0 DirectClass 8-bit 581.3K 0.000u 0:01

-------------------------------------
出現404錯誤,查看nginx錯誤日志:
root@ip82:/etc/nginx/logs# ls
access.log error.log nginx.pid
root@ip82:/etc/nginx/logs# tail -f error.log
/usr/local/GraphicsMagick/bin/gm convert: Unable to open file (/data/fdfs/data/00/00/CgACUlbBe2aAAWgRAAJF3TQI0W8948.jpg_80x80.jpg) [Permission denied].
發現沒有對應權限,進行授權:
root@ip82:/data/fdfs# chmod 777 -R data
再次訪問就可以了
http://10.0.2.82/group1/M00/00/00/CgACUlalwCWAbKFfAAQA3nlGY5k195.jpg_40x40.jpg
http://10.0.2.82/group1/M00/00/00/CgACUlbBe2aAAWgRAAJF3TQI0W8948.jpg_60x60.jpg

=========================================
升級nginx:
1.下載新版:
root@ip82:/home/user# wget http://nginx.org/download/nginx-1.9.9.tar.gz
root@ip82:/home/user# tar zxvf nginx-1.9.9.tar.gz

2.查看nginx原來的配置
/etc/nginx/sbin/nginx -V
nginx version: nginx/1.1.19
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configure arguments: --prefix=/etc/nginx --with-http_gzip_static_module --add-module=../fastdfs-nginx-module/src/

3.進入到新版本目錄,執行configure命令,后面跟上原來nginx的配置,有新的也可以一並加上
root@ip82:/home/user# cd /home/user/nginx-1.9.9
root@ip82:/home/user/nginx-1.9.9# ./configure --prefix=/etc/nginx --with-http_gzip_static_module --add-module=/home/user/fdfs-wnw/fastdfs-nginx-module/src/ --add-module=/home/user/ngx_devel_kit-0.2.19 --add-module=/home/user/lua-nginx-module-0.10.0

4.執行make令命編譯nginx, 編譯好以后objs目錄下多出一個nginx文件,這個就是已編輯好的nginx程序
root@ip82:/home/user/nginx-1.9.9# make

5.更改舊的nginx程序的名字,並復制新的程序過去,舊nginx程序放在/etc/nginx/sbin/目錄中
root@ip82:/home/user/nginx-1.9.9# /etc/nginx/sbin/nginx -s stop

root@ip82:/home/user/nginx-1.9.9# mv /etc/nginx/sbin/nginx /etc/nginx/sbin/nginx-1.1.19
root@ip82:/home/user/nginx-1.9.9# cp objs/nginx /etc/nginx/sbin/nginx
root@ip82:/home/user/nginx-1.9.9# /etc/nginx/sbin/nginx -t
/etc/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
說明有錯誤, 這是因為系統默認會到/usr/lib或/usr/lib64找libluajit-5.1.so.2,解決辦法:
root@ip82:/home/user/nginx-1.9.9# find /|grep libluajit-5.1.so
root@ip82:/home/user# find /|grep libluajit-5.1.so
/usr/local/lib/libluajit-5.1.so.2.0.3
/usr/local/lib/libluajit-5.1.so
/usr/local/lib/libluajit-5.1.so.2
root@ip82:/home/user# cd /usr/local/lib/
root@ip82:/usr/local/lib# ls
libluajit-5.1.a libluajit-5.1.so libluajit-5.1.so.2 libluajit-5.1.so.2.0.3
root@ip82:/usr/local/lib# cp libluajit-5.1.a /usr/lib/libluajit-5.1.a
root@ip82:/usr/local/lib# cp libluajit-5.1.so /usr/lib/libluajit-5.1.so
root@ip82:/usr/local/lib# cp libluajit-5.1.so.2 /usr/lib/libluajit-5.1.so.2
root@ip82:/usr/local/lib# cp libluajit-5.1.so.2.0.3 /usr/lib/libluajit-5.1.so.2.0.3
root@ip82:/usr/local/lib# /etc/nginx/sbin/nginx -t
ngx_http_fastdfs_set pid=27738
nginx: the configuration file /etc/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/conf/nginx.conf test is successful

10.在新nginx源碼目錄下執行下面的命令來升級nginx
root@ip82:/usr/local/lib# cd /home/user/nginx-1.9.9
root@ip82:/home/user/nginx-1.9.9# make upgrade

11.執行nginx -v命令,輸出新版本則升級完畢:
root@ip82:/home/user/nginx-1.9.9# /etc/nginx/sbin/nginx -v
nginx version: nginx/1.9.9

12.重啟nginx:
root@ip82:/home/user/nginx-1.9.9# service nginx restart
* Stopping Nginx server
...done.
* Starting Nginx server
ngx_http_fastdfs_set pid=27785
...done.
root@ip82:/home/user/nginx-1.9.9#

注意:升級后無法使用原來的-s reload 方法重啟nginx了
root@ip82:/etc/nginx/conf# /etc/nginx/sbin/nginx –s reload
nginx: invalid option: "–s"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM