host/path/ 的 HAProxy 路径
HAProxy path to host/path/
请多多包涵,我不是天生的程序员。
这是我尝试使用 HAproxy 实现的目标,但经过数小时的检查,我无法以某种方式使其工作。
来自
- 域名.com/alpha
- 域名.com/beta
至
- domain.com/alpha 将指向 backend1/path/index.cgi
- 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:8080
和 localhost:8081
替换为适合您的案例的正确位置。
说明
首先,在名为 HTTP 的前端中,有两个 ACL(访问控制列表)用于测试 URL 开头的内容(因此关键字 url_beg
)。这些规则的结果是,如果 url 以 /alpha
开头,则名为 alpha
的变量设置为 true,然后对 beta 设置相同。
接下来在前端,如果变量 alpha
设置为 true,则有两个 use_backend
命令将请求定向到 backend_alpha
,[=20= 也是如此] 如果 beta
设置为真。
结果,前端完成了获取 url 并决定使用哪个服务器的工作。
两个后端(backend_alpha
和 backend_beta
)几乎相同,除了文本 alpha
和 beta
以及各自服务器的位置。后端中的第一个命令是您指出的 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
命令将请求发送到适当的服务器。
我想指出我不是复杂的正则表达式部分的专家(我也觉得它有点混乱)但希望其他了解更多的人可以更详细地解释它或纠正我如果我错了。
希望对您有所帮助:)
请多多包涵,我不是天生的程序员。
这是我尝试使用 HAproxy 实现的目标,但经过数小时的检查,我无法以某种方式使其工作。
来自
- 域名.com/alpha
- 域名.com/beta
至
- domain.com/alpha 将指向 backend1/path/index.cgi
- 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:8080
和 localhost:8081
替换为适合您的案例的正确位置。
说明
首先,在名为 HTTP 的前端中,有两个 ACL(访问控制列表)用于测试 URL 开头的内容(因此关键字 url_beg
)。这些规则的结果是,如果 url 以 /alpha
开头,则名为 alpha
的变量设置为 true,然后对 beta 设置相同。
接下来在前端,如果变量 alpha
设置为 true,则有两个 use_backend
命令将请求定向到 backend_alpha
,[=20= 也是如此] 如果 beta
设置为真。
结果,前端完成了获取 url 并决定使用哪个服务器的工作。
两个后端(backend_alpha
和 backend_beta
)几乎相同,除了文本 alpha
和 beta
以及各自服务器的位置。后端中的第一个命令是您指出的 reqrep
命令。 reqrep
命令的作用是获取 url,使用正则表达式搜索特定部分,然后用其他内容替换它。在这种情况下,我们有这个 url:
http://example.com/alpha
在reqrep command的第一部分:
^([^\ ]*\ /)
获取http://example.com/
并将其存储在名为</code></li> 的变量中 <li><code>alpha
然后匹配给定 url 中的 [/]?(.*)
获取alpha
之后的所有内容并将其存储在一个名为</code>(在这种情况下,<code>
不等于任何内容,因为 url 中的alpha
之后没有任何内容)
alpha
然后 reqrep
命令的第二部分说获取 </code> (<code>http://example.com/
) 的内容并在末尾添加 path/index.cgi
并使其成为新的 url 发送到服务器。
作为 alpha 和 beta urls 的结果,发送到服务器的结果 url 是 http://example.com/path/index.cgi
。
最后 server
命令将请求发送到适当的服务器。
我想指出我不是复杂的正则表达式部分的专家(我也觉得它有点混乱)但希望其他了解更多的人可以更详细地解释它或纠正我如果我错了。
希望对您有所帮助:)