5

我的用例是我有一封包含“验证您的电子邮件地址”链接的电子邮件。当用户单击此链接时,用户代理会执行 GET 请求,例如:

GET http://widgetwerkz.example.com/confirm_email?challenge=LSXGMRUQMEBO

服务器将作为 POST 执行此操作(因为它是一个副作用操作)。我根本无法访问服务器代码。目标请求应该是:

POST http://widgetwerkz.example.com/rpc/verify

{ "challenge": "LSXGMRUQMEBO" }

我可以执行什么 Nginx 重写来实现这一目标?

编辑:上下文中的解决方案

http {
    server {
        # ... 
        location /confirm_email {
            set $temp $arg_challenge;
            proxy_method POST;
            proxy_set_body '{ "challenge": "$temp" }';
            proxy_pass http://127.0.0.1/rpc/verify;
            set $args '';
        }
    }
}

这将所有这些一起完成:

  • 将请求从 GET 转换为 POST
  • 将位置从 重写/confirm_email/rpc/verify
  • 从请求中删除查询字符串(例如,结果 url 是简单/rpc/verify的,没有?challenge=LSXGMRUQMEBO
  • 添加 JSON 正文:{ "challenge": "LSXGMRUQMEBO" }

感谢 Ivan 让我走上正轨!

4

1 回答 1

5

你需要这样的东西:

location /confirm_email {
    proxy_method POST;
    proxy_set_body '{ "challenge": "$arg_challenge" }';
    # your proxy_set_headers and other parameters here
    proxy_pass <your_backend>/rpc/verify?;
}
于 2018-12-13T17:08:06.123 回答