【问题标题】:How can I read and manipulate POST request variables with nginx?如何使用 nginx 读取和操作 POST 请求变量?
【发布时间】:2013-11-25 11:50:31
【问题描述】:

我正在使用 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,但第一个似乎有点矫枉过正,而后者已经有一段时间没有更新了。

【问题讨论】:

    标签: nginx


    【解决方案1】:

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

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

    【讨论】:

    • 这可能不明智,但这是我想要做的:)。我无法控制我 proxy_passing 的服务,所以这不是一个选项。对不起!
    • 我在 google 中遇到了这个,这没用,尝试通过代理添加 API 机密/客户端,即编辑帖子正文是一个非常有效且非常明智的要求。
    【解决方案2】:

    您是否尝试过使用proxy_set_body

    应该是这样的

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

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 2014-04-14
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      相关资源
      最近更新 更多