nginx lua修改请求体然后转发

本文介绍如何在Nginx中使用Lua脚本对POST请求体进行处理,通过`cjson`库解析和修改JSON数据,同时设置了代理到127.0.0.1:8102并调整了请求头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值