我们有:
2个HaProxy服务器,分别称为Ha1,Ha2 3个Apache服务器,分别称为S1,S2,S3 2个Web Apps服务器,分别称为:App1,App2
所以,我需要将2个应用路由到同一台Web服务器
App1.com : Ha1 -> S1.App1.com
App1.com : Ha1 -> S2.App1.com
App1.com : Ha1 -> S3.App1.com
App2.com : Ha2 -> S1.App2.com
App2.com : Ha2 -> S2.App2.com
App2.com : Ha2 -> S3.App2.com
我正在使用Keepalived,并且工作正常,但是路由仅从每个Apache Web服务器调用默认虚拟主机,例如:
S1默认Web服务器是S1.App1.com S2的默认Web服务器是S2.App1.com S3默认Web服务器是S3.App1.com 因此,当我在等待SX.App2.com时,调用App2.com的代理路由到SX.App1.com。如果服务器上的默认虚拟主机为App2,则现在无法正常运行的是App1.com
frontend APP2 App2.com:80
acl APP2 hdr_end(host) -i App2.com
use_backend APP2_1 if APP2
backend APP2_1
option httpclose
mode http
option httplog
balance static-rr
option httpchk
option forwardfor
server S1App2 S1.App2.com:80 weight 5 maxconn 1000 check
server S2App2 S2.App2.com:80 weight 5 maxconn 1000 check
server S3App2 S3.App2.com:80 weight 5 maxconn 1000 check
我正在使用HAProxy 1.5.4版本,于2014/09/02发布
如果我通过wget从haproxy服务器调用到S1.App2.com,则工作正常,因此S1,S2,S3上的虚拟主机也很好。
您知道我如何将呼叫路由到特定的虚拟主机,而没有默认虚拟主机吗?
谢谢大家 问候!
答案 0 :(得分:0)
最后,我们解决了服务器中每个应用程序端口更改的情况,例如:
httpd.conf,我们唤醒端口8081、8082、8083,然后在虚拟主机的每个应用程序中,我们将默认端口设置为默认端口
<VirtualHost *:8081>
DocumentRoot "/path/of/app1/public"
...
</VirtualHost>
<VirtualHost *:8082>
DocumentRoot "/path/of/app2/public"
...
</VirtualHost>
<VirtualHost *:8083>
DocumentRoot "/path/of/app3/public"
...
</VirtualHost>
然后,每个HAproxy cfg
server S1App2 S1.App2.com:8082 weight 5 maxconn 1000 check
server S2App2 S2.App2.com:8082 weight 5 maxconn 1000 check
server S3App2 S3.App2.com:8082 weight 5 maxconn 1000 check
因此,在这种模式下,我们可以在每个服务器的每个端口中从haproxy进行默认调用。