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