Nginx 內嵌lua指令碼,結合Redis使用

來源:互聯網
上載者:User
0x00 Nginx 內嵌Lua指令碼有以下特點:

  • 20k個並發串連

  • Lua指令碼可以在Nignx 11個層次的不同層次發揮作用,擴充Ngnix功能

  • Lua速度極快(寄存器指令)

0x01 應用情境

  • 在web server端做請求過濾處理(如:WAF、Anti CC等)

0x02 簡單配置過程

  1. 測試環境Ubuntu Server 14.04.2 LTS

  2. 幾個需要下載的模組(注意安裝順序和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):

  1. 添加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教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.