到主机/路径的HAProxy路径/

时间:2015-05-15 09:58:52

标签: haproxy

请耐心等待我,因为我本质上不是编码员。

这是我尝试使用HAproxy实现的,但经过数小时的检查后,我无法以某种方式使其工作。

  1. domain.com/alpha
  2. domain.com/beta
    1. domain.com/alpha将指向backend1 / path / index.cgi
    2. domain.com/beta将指向backend2 / path / index.cgi
    3. 我尝试了多种方法,但无济于事,我确实读过有关重写/重定向的内容,但不知怎的,这让我很困惑。例如" reqrep"

      使用alpha.domain.com指向backend1 / path按预期工作,但由于证书限制,我需要内联路径。

      提前感谢您,如果可能的话,请解释abit它是如何工作的,并说明正确的术语(例如:重写,重定向),以便我可以对此有所了解,并且我将从那里开始。

1 个答案:

答案 0 :(得分:17)

这是我能够提出的:

frontend HTTP
    mode http
    bind *:80

    acl alpha url_beg /alpha
    acl beta url_beg /beta
    use_backend backend_alpha if alpha 
    use_backend backend_beta if beta

backend backend_alpha
    reqrep ^([^\ ]*\ /)alpha[/]?(.*)     \1path/index.cgi
    server server_alpha localhost:8080

backend backend_beta
    reqrep ^([^\ ]*\ /)beta[/]?(.*)     \1path/index.cgi
    server server_beta localhost:8081

显然,您会将localhost:8080localhost:8081替换为您的案例的正确位置。

<强>解释

首先,在名为HTTP的前端中,有两个ACL(访问控制列表),用于测试URL开头的内容(因此是关键字url_beg)。这些规则的结果是,如果网址以/alpha开头,则名为alpha的变量设置为true,然后设置为相同。

接下来在前端,有两个use_backend命令,如果变量backend_alpha设置为true,则会将请求定向到alpha,如果变量backend_beta则相同beta设置为true。

结果,前端完成了获取URL并决定使用哪个服务器的工作。

除了文本backend_alphabackend_beta以及相应服务器的位置之外,两个后端(alphabeta)几乎完全相同。后端的第一个命令是您指出的reqrep命令。 reqrep命令的作用是获取网址,使用正则表达式搜索特定部分,然后将其替换为其他部分。在这种情况下,我们有这个网址:

http://example.com/alpha

reqrep command的第一部分:

  • ^([^\ ]*\ /)获取http://example.com/并将其存储在名为\1
  • 的变量中
  • alpha然后与给定网址中的alpha匹配
  • [/]?(.*)获取alpha之后的所有内容并将其存储在名为的变量中 \2(在这种情况下\2将无效,因为在网址alpha之后没有任何内容。

然后reqrep命令的第二部分显示\1http://example.com/)的内容并添加path/index.cgi到最后并使新的网址发送到服务器。

对于alpha和beta网址,结果发送到服务器的网址为http://example.com/path/index.cgi

最后,server命令将请求发送到适当的服务器。

我想指出我不是复杂的正则表达部分的专家(我发现它有点令人困惑)但希望其他知道更多的人可以更详细地解释它或纠正我如果我我错了。

我希望有帮助:)