如果某些参数不为空,则将HTTP POST请求重定向到另一个子域

时间:2019-09-15 16:43:31

标签: linux nginx http-post cloudflare

我正在将我的Web应用程序与 Cloudflare 集成在一起,Cloudflare在100秒后以 524 响应长时间运行的进程。 Cloudflare提供了为该过程创建单独的子域的解决方案。好的,我想将我的HTTP POST请求重定向到我新创建的子域,如果特定参数的值不为空

以nginx作为Web服务器运行Linux。以下链接仅显示了如何在Cloudflare中从一个子域重定向到另一个子域,但是我想基于POST参数的值进行重定向。

[链接] https://webmasters.stackexchange.com/questions/105897/cloudflare-dns-how-to-301-redirect-all-traffic-from-sub-domain-to-main-domain-w

例如,考虑证据参数,以下是POST请求的数据。如下所示,该请求不应重定向到新的/另一个子域。

{
    "request_id"    : "",
    "callback_url" : "http://www.example.com/",
    "email"        : "",
    "document"         : {
        "evidence"           : "",
        "document_number" : ""
    }
}

但是,如果证据参数不为空,如下所示,则此请求应重定向到新的/另一个子域。

{
    "request_id"    : "",
    "callback_url" : "http://www.example.com/",
    "email"        : "",
    "document"         : {
        "evidence"           : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAALCAYAAABCm8wlAAAABmJLR0QA=",
        "document_number" : ""
    }
}

是否有任何 nginx配置规则或Cloudflare页面规则可以解决此问题?我会感谢你的。

2 个答案:

答案 0 :(得分:0)

使用默认的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

答案 1 :(得分:0)

需要记住的几点:

  • 使用临时重定向,而不是永久重定向,因为它取决于发布的内容,并且您不想破坏该页面的任何书签。
  • 使用307而不是301。在现代浏览器中,307应该重定向POST,而301应该重定向到GET。
  • 系统可能会询问用户是否要重新提交,因此您的网站可能最终被列入黑名单,似乎是网络钓鱼。

另一个选择是使用Cloudflare工作者来处理POST请求。工作人员可以将POST请求转发到正确的后端,而完全不影响用户的体验。