8

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

我已经阅读了许多帖子和 SO 问题,并实施了这个建议的策略,旨在允许记录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,但第一个似乎有点过分,而后者有一段时间没有更新。

4

2 回答 2

5

您是否尝试过使用proxy_set_body

那就像

location /proxy-this/ {
  ... (same configuration as above) ...
  proxy_set_body $request_body&extra_param=1;
}
于 2013-11-22T17:02:08.920 回答
-3

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

proxy_pass https://example.com/external-endpoint/?extra_param=1;
于 2013-11-13T20:20:28.087 回答