通过Nginx和lua实现对请求体的修改

Nginx+Lua实现对post请求参数的修改,json格式的
Nginx配置

location / {
...
	if ($request_method = "POST") {        
		access_by_lua_file    /xxx/xxx/test.lua;
	} 
}

Lua配置
test.lua

function set_Request_body()
    ngx.req.read_body()
    local retTable = {}
    local jsonStr = nil
    local ok = nil
    local json = require("cjson")
    local oldData = ngx.req.get_body_data()              --获取原先的请求体,字符串格式
    if (oldData ~= nuil) then                            --判断原先是否有请求体
            ok, retTable = pcall(cjson.decode, oldData ) --判断原先数据是否是json格式
            if not ok then
                ngx.log(ngx.ERR, 'post data is not json!', oldData )
    		--如果不是json格式,做xxx操作
            else
                --是json格式,做xxx操作
   	    end
    else
            --原先没有请求体的情况,做xxx操作
            retTable["test1"] = "test1"                  --以json的格式添加一个数据
    end
    
    jsonStr = cjson.encode(retTable)                     --将数组转换为字符串
    if  (jsonStr ~= nuil) then
            ngx.req.set_body_data(jsonStr)               --将字符串设置为请求体
    end
end

if ngx.req.get_method() == "POST" then
        set_Request_Body()
end
上一篇:lua-将请求参数里url的地址获取到后进行重定向


下一篇:基于centos7系统自动编译安装nginx服务