lua作為嵌入式腳本,在目前所有的腳本引擎中速度是最快的。它由标準C編寫而成,幾乎在所有作業系統和平台都可以編譯運作。
我們為什麼要用nginx+lua呢?
我們來比較下nginx+lua和nginx+php:
nginx+php之間是要有程序通信的,是以性能開銷很大;而lua是嵌在nginx程序内部的,它不需要有兩套程序獨立工作,是以從接口上就有決定性的優勢;再加上線程之間通訊的時候需要大量的反序列化和序列化的工作,讓後兩套程序帶來的額外情況是更多的程序和更多的切換開銷,是以nginx+lua性能要比nginx+php要好很多。
但是nginx+lua也有劣勢,那就是nginx+lua的周邊子產品相當不健全,如果對并發性能的要求并不是很高時,php比較适合。
我們應用nginx+lua的目的就是通過lua來開發基于nginx的業務邏輯,因為我們需要的是高并發,它作為接口層比較适合。
環境搭建:
1.安裝luajit
luajit是一個利用jit編譯把lua腳本直接編譯成機器碼由cpu運作
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -zxvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make install PREFIX=/usr/local/luajit
添加環境變量:
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
加載類庫
echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf
ldconfig
否則,在營運nginx時會出現以下錯誤:
[root@ nginx]# ./nginx -V
./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
2.安裝ngx_devel_kit和lua-nginx-module
nginx_devel_kit子產品是一個拓展nginx伺服器核心功能的子產品,提供函數和宏處理一些基本任務,減輕第三方子產品開發的代碼量。
lua-nginx-module子產品将lua語言嵌入到nginx配置中,使用亂增強了nginx的能力。
#下載下傳ngx_devel_kit和lua-nginx-module
wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.9.16rc1.tar.gz
tar -zxvf v0.2.19.tar.gz
tar -zxvf v0.9.16rc1.tar.gz
#編譯安裝nginx
cd /usr/local/nginx
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/lua/lua-nginx-module-0.9.16rc1 --add-module=/usr/local/src/lua/ngx_devel_kit-0.2.19
make
make install
3.測試
在nginx配置檔案中加入以下:
location /test {
content_by_lua '
if jit then
ngx.say(jit.version)
else
ngx.say(_VERSION)
end
';
}
./nginx -s reload後檢視:
curl 192.168.3.126/test
LuaJIT 2.0.4
出現以上說明nginx+lua環境安裝成功。
注:若要在浏覽器中檢視,需要在content_by_lua中加入ngx.header.content_type = "text/plain";否則不會顯示頁面。
若是編譯添加子產品,nginx需要先stop再start,才能使lua代碼運作。
另,為友善nginx調用相關lua子產品,我們需要在nginx配置檔案中自定義lua子產品路徑,如:
package.path = "/usr/local/nginx/lualib/?.lua;/usr/local/nginx/lualib/captcha/?.lua;"
package.cpath = "/usr/local/nginx/lualib/?.so;/usr/local/nginx/lualib/captcha/?.so;"
好了,初步的環境搭建就先說到這裡,後續會介紹nginx+lua的相關應用。
nginx和lua的相關api請參考:
http://wiki.nginx.org/HttpLuaModule