0x00 Nginx 內嵌Lua指令碼有以下特點:
0x01 應用情境
0x02 簡單配置過程
測試環境Ubuntu Server 14.04.2 LTS
幾個需要下載的模組(注意安裝順序和export路徑問題)
Nginx 1.7.4
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-/* /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://tengine.taobao.org/
轉載請註明出處(個人論壇):http://www.byteway.net/thread-index-fid-4-tid-316.htm
以上就介紹了Nginx 內嵌lua指令碼,結合Redis使用,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。