我们有
2HaProxy服务器,称为Ha1,Ha23 Apache服务器,称为S1,S2,S32 Web Apps服务器,称为: App1, App2
所以,我需要将2个应用程序路由到同一个webserver上。
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服务器的默认vhost,例如:S1默认的web服务器是S1.App1.comS2默认的web服务器是S2.App1.comS3默认的web服务器是S3.App1.com所以当我调用App2.com的时候,haprov是默认的。
S1默认的web服务器是S1.App1.comS2默认的web服务器是S2.App1.comS3默认的web服务器是S3.App1.com所以当我调用App2.com时,当我在等待SX.App2.com时,haproxy路由到SX.App1.com。如果服务器的默认vhost是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版本,20140902发布。
如果我通过wget从haproxy服务器调用到S1.App2.com工作正常,那么S1,S2,S3的vhost也正常。
你知道我怎么能把电话路由到特定的vhost,而不是默认的vhost吗?
谢谢大家Regards!
最后,我们通过改变服务器中每个应用程序的端口来解决这个问题,比如说。
httpd.conf我们唤醒8081, 8082, 8083端口,然后在virtualhost的每个应用中设置相应的默认端口。
<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。