如何将Nginx GET请求重写为POST?

时间:2018-12-13 16:13:20

标签: nginx postgrest

我的用例是,我有一封电子邮件,其中包含“验证您的电子邮件地址”链接。当用户单击此链接时,用户代理将执行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)将我带入正确的轨道!

1 个答案:

答案 0 :(得分:1)

您需要这样的东西:

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;
}