nginx + lua 根據(jù) POST 數(shù)據(jù)動態(tài)路由

搭建環(huán)境

這里就不一一介紹了網(wǎng)上 很多,我都是源碼安裝的,這里羅列出搭建的時候下載的一下包(centos)

nginx-1.12.0
ngx_devel_kit-0.3.0
lua-nginx-module-0.10.9rc6
LuaJIT-2.0.5
lua-cjson-2.1.0

我的需求是根據(jù) post 里面的參數(shù)路由到不同機器

例如:curl -X POST -d '{"boxId":1}' 127.0.0.1:8000/hello
boxid=1 路由到 '127.0.0.1:9000'
boxid=2,3,.... 路由到 '127.0.0.1:10000'

現(xiàn)在配置 nginx

 server {
        listen       8000;

        location ^~ / {
                  default_type 'text/plain';

            content_by_lua 'ngx.say("hello, lua register")';
        }

        location /hello {
                #resolver 8.8.8.8;
                set $backend  '';
                rewrite_by_lua_file  conf/lua/ivr.lua;
                proxy_pass http://$backend;

                #curl -X POST  -d '{"boxId":1}' 127.0.0.1:8000/hello 
                #curl -X POST  -d '{"boxId":2}' 127.0.0.1:8000/hello
        }
    }

backend 就是要路由的地址,在ivr.lua 里面計算出
下面看 ivr.lua

package.cpath = '/nginx/cjson/lib/lua/5.1/?.so;'
--json
local cjson = require "cjson"
ngx.req.read_body()
local body_data = ngx.req.get_body_data()
local unjson = cjson.decode(body_data)
if  unjson["boxId"] == 1 then
        res = '127.0.0.1:9000'
else
        res = '127.0.0.1:10000'
end
ngx.var.backend = res

是不是很簡單,我下載了一個cjson 的庫, 這里要注意下,由于我是自定義安裝的,所以需要package.cpath 指定下

是不是超簡單,nginx + lua 搞起?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容