轉載注明地址:http://www.cnblogs.com/dongxiao-yang/p/5312285.html
本文主要采用手動源碼安裝的方式將lua-nginx模塊編譯到nginx源碼內部
一:系統版本
1 cat /etc/issue
CentOS release 6.7 (Final)
Kernel \r on an \m
2 cat /proc/version
Linux version 2.6.32-573.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) ) #1 SMP Thu Jul 23 15:44:03 UTC 2015
二 :安裝
1 安裝LuaJIT
下載地址http://luajit.org/download.html,本次下載的是2.0.0版本
安裝命令參考http://luajit.org/install.html教程,本文直接修改了Makefile文件里的默認路徑PREFIX到/opt/luajit-2.0.0。
make && make install
安裝完畢。
2 安裝nginx
(1) 下載ng源碼並解壓
wget http://nginx.org/download/nginx-1.8.1.tar.gz
(2)下載 ngx_devel_kit (NDK) 模塊 HERE. 解壓
(3)下載 ngx_lua HERE.解壓
(4)安裝pcre依賴庫
yum install readline-devel pcre-devel openssl-devel gcc
(5)設置變量並編譯export LUAJIT_LIB=/opt/luajit-2.0.0/lib(根據本機位置)
export LUAJIT_INC=/opt/luajit-2.0.0/include/luajit-2.0(根據本機位置) cd nginx-1.8.1 ./configure --prefix=/opt/nginx-build-1.8.1 \ --with-ld-opt="-Wl,-rpath,/opt/luajit-2.0.0/lib" \ --add-module=/opt/lua-nginx-module-0.10.2 \ --add-module=/opt/ngx_devel_kit-0.3.0rc1
make -j2
make install
這里注意的是很多人編譯的時候沒有加選項:--with-ld-opt="-Wl,-rpath,/opt/luajit-2.0.0/lib
這樣會導致編好的nginx在啟動的時候會無法找到位於luajit內的類庫,類似於
/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf /opt/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
這個問題很多人發現后采用了將libluajit-5.1.so.2鏈接到系統庫的做法,比如http://cywhoyi.iteye.com/blog/2118913,以及https://www.ttlsa.com/nginx/nginx-modules-ngx_lua,采用的
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/
這樣可以解決問題,但是相當於一個補救方法。
參考問題https://github.com/openresty/lua-nginx-module/issues/8 里agentzh的回答
--with-ld-opt=
— sets additional parameters that will be used during linking. When using the system PCRE library under FreeBSD, parameters
--with-ld-opt="-L /usr/local/lib"
should be specified.
所以相當於直接把luajit的lib庫加到了nginx的搜索庫。
(6)啟動
ln -s nginx-build-1.8.1 nginx 設為默認路徑
/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
啟動成功
參考資料