如何用haproxy在同一台服务器上的多个vhost上路由一个特定的vhost。

问题描述 投票:0回答:1

我们有

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!

apache routing backend haproxy vhosts
1个回答
0
投票

最后,我们通过改变服务器中每个应用程序的端口来解决这个问题,比如说。

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。

© www.soinside.com 2019 - 2024. All rights reserved.