请耐心等待我,因为我本质上不是编码员。
这是我尝试使用HAproxy实现的,但经过数小时的检查后,我无法以某种方式使其工作。
这
要
我尝试了多种方法,但无济于事,我确实读过有关重写/重定向的内容,但不知怎的,这让我很困惑。例如" reqrep"
使用alpha.domain.com指向backend1 / path按预期工作,但由于证书限制,我需要内联路径。
提前感谢您,如果可能的话,请解释abit它是如何工作的,并说明正确的术语(例如:重写,重定向),以便我可以对此有所了解,并且我将从那里开始。
答案 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:8080
和localhost:8081
替换为您的案例的正确位置。
<强>解释强>
首先,在名为HTTP的前端中,有两个ACL(访问控制列表),用于测试URL开头的内容(因此是关键字url_beg
)。这些规则的结果是,如果网址以/alpha
开头,则名为alpha
的变量设置为true,然后设置为相同。
接下来在前端,有两个use_backend
命令,如果变量backend_alpha
设置为true,则会将请求定向到alpha
,如果变量backend_beta
则相同beta
设置为true。
结果,前端完成了获取URL并决定使用哪个服务器的工作。
除了文本backend_alpha
和backend_beta
以及相应服务器的位置之外,两个后端(alpha
和beta
)几乎完全相同。后端的第一个命令是您指出的reqrep
命令。 reqrep
命令的作用是获取网址,使用正则表达式搜索特定部分,然后将其替换为其他部分。在这种情况下,我们有这个网址:
http://example.com/alpha
reqrep command的第一部分:
^([^\ ]*\ /)
获取http://example.com/
并将其存储在名为\1
alpha
然后与给定网址中的alpha
匹配[/]?(.*)
获取alpha
之后的所有内容并将其存储在名为的变量中
\2
(在这种情况下\2
将无效,因为在网址alpha
之后没有任何内容。然后reqrep
命令的第二部分显示\1
(http://example.com/
)的内容并添加path/index.cgi
到最后并使新的网址发送到服务器。
对于alpha和beta网址,结果发送到服务器的网址为http://example.com/path/index.cgi
。
最后,server
命令将请求发送到适当的服务器。
我想指出我不是复杂的正则表达部分的专家(我发现它有点令人困惑)但希望其他知道更多的人可以更详细地解释它或纠正我如果我我错了。
我希望有帮助:)