我的用例是我有一封包含“验证您的电子邮件地址”链接的电子邮件。当用户单击此链接时,用户代理会执行 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 让我走上正轨!