一、Lua說明:
Lua 是一個簡潔、輕量、可擴充的腳本語言,也是号稱性能最高的腳本語言,用在很多需要性能的地方,比如:遊戲腳本,nginx,wireshark的腳本,當你把他的源碼下下來編譯後,你會發現解釋器居然不到200k,非常變态。很多應用程式使用Lua作為自己的嵌入式腳本語言,以此來實作可配置性、可擴充性。
二、實驗環境:
192.168.1.194伺服器(centos 6.5 final版本)
nginx版本:nginx-1.6.1
三、安裝配置:
這裡假定已經安裝好了nginx(安裝nginx比較簡單,網上案例很多),下面開始動态編譯擴充nginx使其支援lua腳本。
- 下載下傳并安裝luajit(lua即時編譯器)
# wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz
# tar zxvf LuaJIT-2.0.2.tar.gz
# cd LuaJIT-2.0.2
# make
# make install
- 下載下傳lua-nginx-module子產品和ngx_devel_kit(nginx開發工具包)到nginx的同級目錄并解壓
#wget https://codeload.github.com/openresty/lua-nginx-module/zip/v0.10.1 -o lua-nginx-module-0.10.1.zip
#unzip lua-nginx-module-0.10.1.zip
#wget -o ngx_devel_kit-0.2.18.tar.gz https://github.com/simpl/ngx_devel_kit/archive/v0.2.18.tar.gz
#tar zxvf ngx_devel_kit-0.2.18.tar.gz
- nginx -V可以檢視nginx的版本,以及之前編譯的項目。
# /usr/local/apps/nginx/sbin/nginx -V
nginx version: nginx/1.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module
- 要想nginx支援lua,有兩種方法:
- 方法a、使用luajit即時編譯器
# export LUAJIT_LIB=/usr/local/lib
# export LUAJIT_INC=/usr/local/include/luajit-2.0
# ./configure --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module --add-module=../lua-nginx-module-0.10.1/ --add-module=../ngx_devel_kit-0.2.18/
# make -j 4
# make install
# echo '/usr/local/lib' >> /etc/ld.so.conf.d/lua.conf
# ldconfig
-
- 方法b、使用lua編譯器
# export LUA_LIB=/usr/lib64
# export LUA_INC=/usr/include
# ./configure --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module --add-module=../lua-nginx-module-0.10.1/ --add-module=../ngx_devel_kit-0.2.18/
# make -j 4
# make install
注意:讓nginx支援lua,有兩種方法,一是使用luajit即時編譯器,二是使用lua編譯器。推薦使用luajit,因為效率高。
編譯安裝好,nginx就可以支援lua腳本了。
再用nginx -V看一下nginx支援的子產品
# /usr/local/rktsapps/nginx/sbin/nginx -V
nginx version: nginx/1.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module --add-module=../lua-nginx-module-0.10.1/ --add-module=../ngx_devel_kit-0.2.18/
可以看到我們新增加的兩個子產品,已經被編譯進nginx裡面去了。
四、驗證配置指令和輸出
修改nginx.conf配置檔案,加入下面指令:
location / {
content_by_lua 'ngx.say("hello world!")';
}
重新開機nginx,用curl測試
# curl -i localhost
結果為:
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Tue, 24 Sep 2013 23:23:58 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive
hello world!
五、安裝遇到的問題:
錯誤提示:
make[1]: *** [/apps/lib/openssl-1.0.1i/.openssl/include/openssl/ssl.h] Error 2
修改nginx源代碼裡面的一個檔案内容。
# vim nginx-1.6.1/auto/lib/openssl/conf
CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
替換成
CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
重新編譯安裝即可!!!