到主机/路径的HAProxy路径/
请容忍我,因为我不是天生的程序员 这是我试图用HAproxy实现的,但经过几个小时的检查,我无法使它以某种方式工作 从到主机/路径的HAProxy路径/,haproxy,Haproxy,请容忍我,因为我不是天生的程序员 这是我试图用HAproxy实现的,但经过几个小时的检查,我无法使它以某种方式工作 从 domain.com/alpha domain.com/beta 到 domain.com/alpha将指向backend1/path/index.cgi domain.com/beta将指向backend2/path/index.cgi 我尝试过多种方法,但都没有成功,我确实读过关于重写/重定向的文章,但不知怎的,这让我很困惑。例如“reqrep” 通过使用alpha.dom
提前感谢您,如果可能的话,请解释一下它是如何工作的,以及正确的术语是什么(例如:重写、重定向),这样我就可以知道这方面的线索,我将从那里继续前进。这就是我能够想到的:
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\u beg
)。这些规则的结果是,如果url以/alpha
开头,则名为alpha
的变量设置为true,然后对beta设置为true
接下来在前端,如果变量alpha
设置为true,则有两个use_backend
命令将请求定向到backend_alpha
,如果变量beta
设置为true,则backend_beta
也有相同的命令
因此,前端负责获取url并决定使用哪台服务器
两个后端(backend_alpha
和backend_beta
)几乎相同,除了文本alpha
和beta
以及各自服务器的位置。后端中的第一个命令是您指出的reqrep
命令。reqrep
命令的作用是获取一个url,使用正则表达式搜索特定部分,然后用其他内容替换它。在本例中,我们有以下url:
http://example.com/alpha
在报告的第一部分:
需要^([^\]*\/)
并将其存储在名为http://example.com/
\1
然后与给定url中的alpha
匹配alpha
获取[/]?(.*)
之后的所有内容,并将其存储在名为alpha
(在这种情况下,\2
将等于零,因为url中的\2
后面没有任何内容)alpha
reqrep
命令的第二部分说获取\1
的内容(http://example.com/
)并在末尾添加path/index.cgi
,使其成为发送到服务器的新url
因此,对于alpha和beta url,发送到服务器的结果url都是http://example.com/path/index.cgi
最后,server
命令将的请求发送到相应的服务器
我想指出的是,我不是复杂正则表达式部分的专家(我也觉得有点困惑),但希望其他知道多一点的人能更详细地解释它,或者在我错的时候纠正我
我希望这有帮助:)您能告诉我如何查找用户是否只输入了wwwdomaincom。我不明白。检查
path\u beg-i
不起作用,因为它出现了,即使没有显示在浏览器地址栏中,类似的东西实际上出现在wwwdomaincom/HTTP 1.1中,因此检查path\u beg的空白在@allinking中不起作用。也许你最好提出我们自己的问题,而不是在这里提问。这样,其他可能知道答案的人可以提供帮助。