0x00 Nginx 內嵌Lua腳本有下面特色:
html
20k個併發鏈接nginx
Lua腳本可以在Nignx 11個層次的不一樣層次發揮做用,擴展Ngnix功能git
Lua速度極快(寄存器指令)github
0x01 應用場景web
在web server端作請求過濾處理(如:WAF、Anti CC等)redis
0x02 簡單配置過程shell
測試環境Ubuntu Server 14.04.2 LTS併發
幾個需要下載的模塊(注意安裝順序和export路徑問題)ui
Nginx 1.7.4
lua
LuaJIT-2.0.4(A Just-In-Time Compiler for Lua)
ngx_devel_kit( Nginx Development Kit)
echo-nginx-module( more shell-style goodies to Nginx config file)
lua-nginx-module(Embed the Power of Lua into Nginx)
0x03 可能存在的問題。找不到 lua.h 等,是因爲luaJIT的lib和inc沒有配置在環境變量中
需要這樣配置(你實際的本地路徑):
export LUAJIT_LIB=/usr/lib/lua
export LUAJIT_INC=/usr/local/include/luajit-2.0
cp /usr/local/include/luajit-<VERSION>/* /usr/local/include/
假設有沒法啓動的狀況。service 可以查看 tail /var/log/syslog 查看錯誤
假設是nginx沒法啓動可以查看 tail /var/cache/nginx/error.log
假設已經生成nginx bin文件 可以用 nginx -V 來查看 配置文件是否正確
假設缺乏一下模塊:
PCRE
sudo apt-get install libpcre3 libpcre3-dev
zlib
sudo apt-get install zlib1g-dev
openssl
sudo apt-get install libssl-dev
ps:特別說明的是。請注意下Nginx的版本號不要下載最新的,可能不支持上面那些模塊接口,我用的是Nginx 1.7.4
當中0x02的安裝步驟都有安裝說明,這裏就不細說了
0x04 安裝完後
改動nginx.conf文件 (默認路徑 /etc/nginx/nginx.conf):
加入lua代碼
又一次load nginx 配置
sudo /etc/nginx/sbin/nginx -s reload
效果:
2. 加入lua 文件:
加入兩個lua_package_path,lua_code_cache(爲了避免保留lua cache,方便調試。實際項目中需要打開)
整體的lua文件的文件夾(注意lua文件夾中的文件是接下來新建的):
/etc/nginx/lua/hello.lua
/etc/nginx/lua/hello_redis.lua
/etc/nginx/lua/redis.lua
nginx.conf 文件加入:
hello.lua文件內容:
ngx.header.content_type = "text/plain";
ngx.say("say hello from hello.lua");
所有加入的location代碼:
而後又一次load nginx 看效果。
3.使用redis(第三條新加的redis):
前提是機器上已有redis-server, Ubuntu上安裝是 sudo apt-get install redis-server
hello_redis.lua 內容:
local redis = require "redis"
local cache = redis.new()
local ok, err = cache.connect(cache, '127.0.0.1', '6379')
cache:set_timeout(60000)
if not ok then
ngx.say("failed to connect:", err)
return
end
res, err = cache:set("hello", "redis in nginx_inline_lua")
if not ok then
ngx.say("failed to set hello: ", err)
return
end
ngx.say("set result: ", res)
local res, err = cache:get("hello")
if not res then
ngx.say("failed to get hello: ", err)
return
end
if res == ngx.null then
ngx.say("hello not found.")
return
end
ngx.say("hello: ", res)
local ok, err = cache:close()
if not ok then
ngx.say("failed to close:", err)
return
end
效果:
0x05 現在爲止,簡單的一個在Nginx 中內嵌Lua並且操做Redis的過程已經完畢了,在配置時候可能有很是多細小的問題。但是不要放棄,堅持下去。相信你就會成功。
0xFF 附加資料:
http://wiki.nginx.org/HttpLuaModule
http://openresty.org/ (最早完畢Nginx內嵌Lua的Chinese)
轉載請註明出處(我的論壇):http://www.byteway.net/thread-index-fid-4-tid-316.htm