如何在nginx中检查POST请求体(使用HttpLuaModule)

我的目标是检查 POST 请求的主体并将其与 nginx 上的一些键值对列表进行比较。在我的情况下,POST 请求将始终使用 JSON 格式。每个请求都包含一个 key:value 对,如此:"transaction":“12345”"transaction": "098765"。这意味着键“transaction”将始终存在,而值将在某些时候更改。 我想使用 lua-nginx-module 检查 POST body,然后将其与来自 memcached 的键值对进行比较。 我还没有要显示的代码,但我会尽快更新一个问题。我想知道是否有人可以帮助我入门,或者展示如何完成此操作。

点赞
用户2789404
用户2789404

有许多种在 ngx_lua 中检查 POST 请求的 body 的方法,具体取决于您的需求:

  1. 完全缓冲的方法:使用 ngx.req.read_bodyngx.req.get_body_data,和 ngx.req.get_body_file

  2. 流式处理的方法:使用 ngx.req.socket来读取并处理请求体流程的块。

2013-09-27 21:56:40
用户929902
用户929902

以下是我所做的内容:

server {
        listen 80;
        location /api/setdata {
            lua_need_request_body on;
            content_by_lua_file template/content.lua;
        }
    }

template/content.lua:

function processRequest()
    ngx.req.read_body()
    local request_body = ngx.req.get_body_data()
    ngx.say(request_body)
end
2019-02-26 15:42:10
用户7710751
用户7710751

使用以下代码即可:

ngx.req.read_body()
local request_body = ngx.req.get_body_data()

同时,无需使用lua_need_request_body on;指令,因为它与ngx.req.read_body()做的事情一样。

2020-06-23 16:57:36