Redirect Haproxy-301/302使用所有路径将URL1重定向到URL2

Redirect Haproxy-301/302使用所有路径将URL1重定向到URL2,redirect,haproxy,http-status-code-301,http-status-code-302,Redirect,Haproxy,Http Status Code 301,Http Status Code 302,我有点迷路了。我尝试在复杂的HAproxy配置中实现重定向。目标很简单: 用户使用子域->123.domain.com 用户将被指向api.domain.com,但认为它仍然在123.domain.com上 用户应该能够使用像123.domain.com/123?123这样的路径,但仍然可以从api.domain.com/123?123获得结果,但认为这是从123.domain.com/123?123获得的结果 我完全不知道如何在不降低生产流量的情况下实现这一点 我要做的是: 在SSL前端

我有点迷路了。我尝试在复杂的HAproxy配置中实现重定向。目标很简单:

  • 用户使用子域->123.domain.com
  • 用户将被指向api.domain.com,但认为它仍然在123.domain.com上
  • 用户应该能够使用像123.domain.com/123?123这样的路径,但仍然可以从api.domain.com/123?123获得结果,但认为这是从123.domain.com/123?123获得的结果
我完全不知道如何在不降低生产流量的情况下实现这一点

我要做的是:

  • 在SSL前端中创建ACL规则,以在使用123.domain.de时指向api后端
重定向前缀代码301,如果{hdr(host)-i api.domain.com}

如果那样行得通的话,那就不是usre了

  • 创建仅指向另一个api url的重定向规则:
重定向位置302,如果{hdr(host)-i api.domain.com}


如果不冒停电的风险,很难实现这一点。有人知道答案吗

首先,我建议您配置一个开发和/或登台环境,以便在进行任何更改之前对其进行测试

要对来自123.domain.com到api.domain.com的所有流量执行301重定向,您可以使用以下命令

http-request redirect prefix http://api.domain.com code 301 if { hdr(host) -i 123.domain.com }
如果您想让HAProxy代表用户连接到api.domain.com后端并屏蔽主机名本身,您可以为api.domain.com添加一个后端,然后创建
use\u backend
规则。请记住,在下面的示例中,没有执行301/302重定向,而是HAProxy代表客户端进行连接

类似这样的方法会奏效:

use_backend api.domain.com if { hdr(host) -i 123.domain.com }
然后在api.domain.com后端中,您可以更新主机头

backend api.domain.com
    http-request set-header Host api.domain.com
    server api1 api.domain.com:80 check

谢谢你这么快回答。我已经创建了一个docker compose设置,使用您的解决方案,我可以让它正常工作。保留的域仍然保持不变。我发现您的第二个示例是一个较短的版本,即在使用“use_backend”指令之前定义acl规则。我还可以发现,当我使用映射文件时,它与使用您推荐的use_后端解决方案相同。在生产中:url不保持不变。当我使用123.domain.com时,它指向api.awin.com。我该怎么做才能强制123.domains.com始终显示而不是api.domain.com?没问题。为了澄清,它正在与123.domain.com合作,正如您所期望的,现在您想添加另一个子域,如345.domain.com?如果是这样的话,您可以继续扩展use_后端行上的ACL,以包括其他主机/子域。