You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx location块中提取$request_body字段与特定值比较

实现方案说明

Nginx原生不支持直接解析JSON格式的请求体,可根据场景选择以下两种实现方式:

方案1:原生Nginx正则匹配(无需额外模块,适合请求格式可控的简单场景)

直接通过正则匹配$request_body中的name字段值,补全后的if判断逻辑如下:

if ($request_body ~* "\"name\"\s*:\s*\"nico\"") {
    return 201 "{}";
}

注意:该方案依赖JSON结构的稳定性,若请求内字段顺序、引号格式、空格缩进不固定可能出现匹配失败的问题,仅推荐内部接口、请求格式完全可控的场景使用。

方案2:Lua模块解析JSON(更稳定,推荐生产环境使用)

如果你的Nginx已集成ngx_http_lua_module(OpenResty发行版默认自带该模块),可以通过Lua代码正式解析JSON后做字段对比,不受JSON格式、字段顺序影响,完整配置如下:

server {
    listen 8080;
    location /my-post-api {
        default_type 'application/json';
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;

        # 提前读取请求体
        lua_need_request_body on;

        access_by_lua_block {
            local cjson = require "cjson"
            local req_body = ngx.req.get_body_data()
            local data = cjson.decode(req_body)
            if data.name == "nico" then
                ngx.status = 201
                ngx.say("{}")
                return ngx.exit(ngx.HTTP_OK)
            end
        }

        return 404 "{}";
    }
}

注意:该方案需要Nginx提前安装Lua模块或直接使用OpenResty发行版,解析逻辑可靠,适配所有合法JSON格式的请求。

内容的提问来源于stack exchange,提问作者Possenti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:51:03