nginx lua修改请求体然后转发

nginx配置:

    location / {
                rewrite_by_lua_file    /xxx/yyy.lua;
                proxy_http_version 1.1;
                proxy_pass  http://127.0.0.1:8102;
                proxy_set_header Host 127.0.0.1:8102;
                proxy_set_header Connection "";
    }

yyy.lua:

function set_request_body()
    ngx.req.read_body()
    local retTable = {}
    local jsonStr = nil
    local ok = nil
    local cjson = require("cjson")
    local oldData = ngx.req.get_body_data()              --获取原先的请求体,字符串格式
    if (oldData ~= nuil) then                            --判断原先是否有请求体
            ok, retTable = pcall(cjson.decode, oldData ) --判断原先数据是否是json格式
            if not ok then
                --如果不是json格式,写报错日志
                ngx.log(ngx.ERR, 'post data is not json!', oldData )
            else
                --是json格式,做修改操作
                retTable["something"] = 123              --以json的格式添加一个数据
            end
    else
            --原先没有请求体的情况,做xxx操作
            retTable["test"] = "test"                    --以json的格式添加一个数据
    end

    jsonStr = cjson.encode(retTable)                     --将数组转换为字符串
    if  (jsonStr ~= nuil) then
            ngx.req.set_body_data(jsonStr)               --将字符串设置为请求体
            --ngx.log(ngx.ERR, 'newJson = ', jsonStr)
    end
end

if ngx.req.get_method() == "POST" then
        set_request_body()
end

lua手册:

https://www.nginx.com/resources/wiki/modules/lua/

你可能感兴趣的:(后端技术,网络技术,开发工具,nginx)