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手册: