使用子域名设置的 Haproxy 设置

使用子域名设置的 Haproxy 设置

希望有人能帮忙确认这是否可行?我正在尝试将 3 个子域流量路由到同一个 haproxy 主机;

这是我的设置

haproxy 具有一个接口 ip 10.10.10.100 和 dns 名称 haproxy01.mydomain.com

与其关联的 3 个 CNAME 记录;sub1.mydomain.com、sub2.mydomain.com 和 sub3.mydomain.com

所有传入流量均发往端口 443。

有两个后端应用服务器,它们在三个端口 8081、8082、8083 上接受流量;

8081 对应 sub1.mydomain.com 8082 对应 sub2.mydomain.com 8083 对应 sub3.mydomain.com

该应用程序仅需要 8081 端口流量的 SSL 传递,因此我相信我必须对其使用 tcp 模式,8082 和 8083 的其他流量也是 SSL,但它可以在 Haproxy 终止,但为了进行测试,我采用了全 TCP 模式。

实现此目的的配置部分如下;

    #Application Setup 
frontend mytraffic
    bind *:443
    mode  tcp
    acl host_sub1 hdr(host) -i sub1.mydomain.com
    acl host_sub2 hdr(host) -i sub2.mydomain.com
    acl host_sub3 hdr(host) -i sub3.mydomain.com

    use_backend sub1_nodes if host_sub1
    use_backend sub2_nodes if host_sub2
    use_backend sub3_nodes if host_sub3

    option tcplog backend sub1_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8081 check
    server node2 10.10.10.102:8081 check 
backend sub2_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8082 check
    server node2 10.10.10.102:8082 check 
backend sub3_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8083 check
    server node2 10.10.10.102:8083 check


    # APPLICATION SETUP END

当我尝试通过 HAproxy 访问应用程序服务器时(例如 8082 流量),它会抛出以下日志;

本地主机 haproxy[6097]: xxxx:51241 [20/Mar/2015:12:19:38.720] mytraffic mytraffic/-1/-1/0 0 SC 0/0/0/0/0 0/0

感谢关于此设置的一些指导。

PS:由于这是我的第一篇帖子,因此为了清晰起见,我无法在此处嵌入任何图片 :-(

答案1

在 TCP 模式下,HAProxy 不会解码 HTTP 请求,因此您的acl线路将不会执行任何操作,并且前端永远无法匹配后端,如您输入的日志所示:mytraffic/<NOSRV>意味着它无法选择后端或服务器。

您必须将 3 个子域拆分为 2 个不同的前端,每个前端都有自己的 IP,因为它们都连接到端口 443。一个用于直通,另一个用于 SSL 终止和使用的内容切换mode http。这里需要注意的是,如果您要添加第 4 个子域 (sub4.mydomain.com),它也需要直通,那么您将需要第 3 个前端和 IP。

您还需要在 DNS 中创建不同的 CNAME 或 A 记录,以便正确的子域指向正确的 IP。

鉴于此 DNS 配置:

10.10.10.100        A         haproxy01-cs.mydomain.com
10.10.10.101        A         haproxy01-pt1.mydomain.com
10.10.10.102        A         haproxy01-pt2.mydomain.com
sub1.mydomain.com   CNAME     haproxy01-pt1.mydomain.com
sub2.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub3.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub4.mydomain.com   CNAME     haproxy01-pt2.mydomain.com

HAproxy 配置如下所示:

#Application Setup 
frontend ContentSwitching

  bind 10.10.10.100:443
  mode  http
  option httplog
  acl host_sub2 hdr(host) -i sub2.mydomain.com
  acl host_sub3 hdr(host) -i sub3.mydomain.com
  use_backend sub2_nodes if host_sub2
  use_backend sub3_nodes if host_sub3

frontend PassThrough1
  bind 10.10.10.101:443
  mode  tcp
  option tcplog
  use_backend sub1_nodes     

frontend PassThrough2
  bind 10.10.10.102:443
  mode  tcp
  option tcplog
  use_backend sub4_nodes

backend sub1_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8081 check
  server node2 10.10.10.102:8081 check 

backend sub2_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8082 check
  server node2 10.10.10.102:8082 check 

backend sub3_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8083 check
  server node2 10.10.10.102:8083 check

backend sub4_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8084 check
  server node2 10.10.10.102:8084 check

相关内容