如果某些参数不为空,则将 HTTP POST 请求重定向到另一个子域
Redirect HTTP POST request to another sub-domain if some parameter is not empty
我正在将我的 Web 应用程序与 Cloudflare 集成,Cloudflare 在 100 秒后以 524 响应长 运行 进程。
Cloudflare 提供了为此过程创建单独子域的解决方案。好的,我想将我的 HTTP POST 请求重定向到我新创建的子域,如果特定参数的值不为空。
运行 Linux 使用 nginx 作为网络服务器。以下 link 仅显示如何在 Cloudflare 中从一个子域重定向到另一个子域,但我想根据 POST 参数值进行重定向。
例如,考虑evidence参数,下面是POST请求的数据。如下所示,此请求不应重定向到 new/another 子域。
{
"request_id" : "",
"callback_url" : "http://www.example.com/",
"email" : "",
"document" : {
"evidence" : "",
"document_number" : ""
}
}
但是如果 evidence 参数不为空,如下所示,那么这个请求应该被重定向到 new/another 子域。
{
"request_id" : "",
"callback_url" : "http://www.example.com/",
"email" : "",
"document" : {
"evidence" : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAALCAYAAABCm8wlAAAABmJLR0QA=",
"document_number" : ""
}
}
有没有nginx配置规则或者Cloudflare Page规则可以解决这个问题?我会感谢你的。
默认的 nginx 安装是不可能的。您需要安装 lua-nginx-module 并使用 ngx.req.get_body_data。我认为文档清楚地说明了如何满足您的要求。
https://github.com/openresty/lua-nginx-module
https://github.com/openresty/lua-nginx-module#ngxreqget_body_data
需要记住的几点:
- 使用临时重定向,而不是永久重定向,因为它取决于发布的内容,并且您不想破坏页面的任何书签。
- 使用 307 而不是 301。307 应该重定向 POST,而 301 应该重定向到现代浏览器中的 GET。
- 可能会询问用户是否要重新提交,因此您的网站最终可能会因出现网络钓鱼而被列入黑名单。
另一种选择是使用 Cloudflare worker 来处理 POST 请求。工作人员可以将 POST 请求转发到正确的后端,完全不会影响用户体验。
我正在将我的 Web 应用程序与 Cloudflare 集成,Cloudflare 在 100 秒后以 524 响应长 运行 进程。 Cloudflare 提供了为此过程创建单独子域的解决方案。好的,我想将我的 HTTP POST 请求重定向到我新创建的子域,如果特定参数的值不为空。
运行 Linux 使用 nginx 作为网络服务器。以下 link 仅显示如何在 Cloudflare 中从一个子域重定向到另一个子域,但我想根据 POST 参数值进行重定向。
例如,考虑evidence参数,下面是POST请求的数据。如下所示,此请求不应重定向到 new/another 子域。
{
"request_id" : "",
"callback_url" : "http://www.example.com/",
"email" : "",
"document" : {
"evidence" : "",
"document_number" : ""
}
}
但是如果 evidence 参数不为空,如下所示,那么这个请求应该被重定向到 new/another 子域。
{
"request_id" : "",
"callback_url" : "http://www.example.com/",
"email" : "",
"document" : {
"evidence" : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAALCAYAAABCm8wlAAAABmJLR0QA=",
"document_number" : ""
}
}
有没有nginx配置规则或者Cloudflare Page规则可以解决这个问题?我会感谢你的。
默认的 nginx 安装是不可能的。您需要安装 lua-nginx-module 并使用 ngx.req.get_body_data。我认为文档清楚地说明了如何满足您的要求。
https://github.com/openresty/lua-nginx-module
https://github.com/openresty/lua-nginx-module#ngxreqget_body_data
需要记住的几点:
- 使用临时重定向,而不是永久重定向,因为它取决于发布的内容,并且您不想破坏页面的任何书签。
- 使用 307 而不是 301。307 应该重定向 POST,而 301 应该重定向到现代浏览器中的 GET。
- 可能会询问用户是否要重新提交,因此您的网站最终可能会因出现网络钓鱼而被列入黑名单。
另一种选择是使用 Cloudflare worker 来处理 POST 请求。工作人员可以将 POST 请求转发到正确的后端,完全不会影响用户体验。