如何使用haproxy在具有多个虚拟主机的同一服务器上路由特定虚拟主机

时间:2019-09-16 13:40:36

标签: apache routing backend haproxy vhosts

我们有:

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上的虚拟主机也很好。

您知道我如何将呼叫路由到特定的虚拟主机,而没有默认虚拟主机吗?

谢谢大家 问候!

1 个答案:

答案 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进行默认调用。