如何使用nginx读取和操作POST请求变量?

如何使用nginx读取和操作POST请求变量?,nginx,Nginx,我正在使用nginx(v1.4.1)代理外部服务,但希望能够在代理前检查并可能修改POST请求的主体。问题是,在处理请求时,我当前无法访问POST请求正文,无论是通过$request\u body变量还是其他方式 我已经阅读了许多帖子和问题,并且已经实现了,这是为了允许记录POST主体(当使用proxy\u pass指令时)。然而,虽然这对我有效,但在处理请求期间,我仍然无法从$request\u body读取任何内容 为清楚起见,以下是我的配置的相关部分: location /proxy-th

我正在使用nginx(v1.4.1)代理外部服务,但希望能够在代理前检查并可能修改
POST
请求的主体。问题是,在处理请求时,我当前无法访问
POST
请求正文,无论是通过
$request\u body
变量还是其他方式

我已经阅读了许多帖子和问题,并且已经实现了,这是为了允许记录
POST
主体(当使用
proxy\u pass
指令时)。然而,虽然这对我有效,但在处理请求期间,我仍然无法从
$request\u body
读取任何内容

为清楚起见,以下是我的配置的相关部分:

location /proxy-this/ {
    client_max_body_size 8k;
    client_body_buffer_size 16k;
    client_body_in_single_buffer on;
    proxy_pass https://example.com/external-endpoint/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_set_header Content-Length '';
}
我希望能够做到:

location /proxy-this/ {
    ... (same configuration as above) ...
    set $request_body $request_body&extra_param=1;
}

我知道使用
nginx\u lua
模块可以实现这一点,并且已经研究了
HttpFormInputModule
,但是第一个似乎有些过分,后者已经有一段时间没有更新了。

试图修改POST数据听起来不明智。我建议在代理传递查询字符串并将其作为GET变量读取时,在查询字符串中设置额外的参数

proxy_pass https://example.com/external-endpoint/?extra_param=1;
你试过使用吗

那就像

location /proxy-this/ {
  ... (same configuration as above) ...
  proxy_set_body $request_body&extra_param=1;
}

这可能不明智,但这正是我想做的:)。我无法控制我要代理的服务,因此这不是一个选项。很抱歉我在谷歌遇到过这个问题,这是没有用的,试图通过代理添加API机密/客户端,即编辑帖子正文是非常有效和合理的要求。