如何将 Nginx GET 请求重写为 POST?
How to rewrite an Nginx GET request into POST?
我的用例是我有一封包含 "verify your email address" link 的电子邮件。当用户单击此 link 时,用户代理会执行 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 让我走上正轨!
你需要这样的东西:
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?;
}
我的用例是我有一封包含 "verify your email address" link 的电子邮件。当用户单击此 link 时,用户代理会执行 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 让我走上正轨!
你需要这样的东西:
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?;
}