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

时间:2013-11-13 02:46:25

标签: nginx

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

我已阅读了一些帖子和SO问题,并已实施this suggested strategy,旨在允许记录POST正文(使用proxy_pass指令时) 。但是,虽然这对我有用,但在处理请求期间我仍然无法从$request_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_lua模块可以实现这一点,并查看了HttpFormInputModule,但第一个看起来有点过头而且后者一段时间没有更新。

2 个答案:

答案 0 :(得分:4)

您是否尝试过使用proxy_set_body

那就像

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

答案 1 :(得分:-3)

尝试修改POST数据听起来不合理。我建议你在proxy_pass它时在查询字符串中设置额外的参数,然后将其作为GET变量读取。

proxy_pass https://example.com/external-endpoint/?extra_param=1;