host/path/ 的 HAProxy 路径

HAProxy path to host/path/

请多多包涵,我不是天生的程序员。

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

来自

  1. 域名.com/alpha
  2. 域名.com/beta

  1. domain.com/alpha 将指向 backend1/path/index.cgi
  2. domain.com/beta 将指向 backend2/path/index.cgi

我尝试了多种方法但都无济于事,我确实读过 rewrite/redirect 但不知何故这让我很困惑。例如 "reqrep"

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

在此先感谢您,如果可能的话,请解释一下它是如何工作的以及什么是正确的术语(例如:重写、重定向),以便我可以对此有所了解,然后我将从那里继续前进。

这是我想出的:

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[/]?(.*)     path/index.cgi
    server server_alpha localhost:8080

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

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

说明

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

接下来在前端,如果变量 alpha 设置为 true,则有两个 use_backend 命令将请求定向到 backend_alpha,[=20= 也是如此] 如果 beta 设置为真。

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

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

http://example.com/alpha

reqrep command的第一部分:

  • ^([^\ ]*\ /) 获取 http://example.com/ 并将其存储在名为 </code></li> 的变量中 <li><code>alpha 然后匹配给定 url
  • 中的 alpha
  • [/]?(.*) 获取 alpha 之后的所有内容并将其存储在一个名为 </code>(在这种情况下,<code> 不等于任何内容,因为 url 中的 alpha 之后没有任何内容)

然后 reqrep 命令的第二部分说获取 </code> (<code>http://example.com/) 的内容并在末尾添加 path/index.cgi 并使其成为新的 url 发送到服务器。

作为 alpha 和 beta urls 的结果,发送到服务器的结果 url 是 http://example.com/path/index.cgi

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

我想指出我不是复杂的正则表达式部分的专家(我也觉得它有点混乱)但希望其他了解更多的人可以更详细地解释它或纠正我如果我错了。

希望对您有所帮助:)