![使用子域名设置的 Haproxy 设置](https://linux22.com/image/654494/%E4%BD%BF%E7%94%A8%E5%AD%90%E5%9F%9F%E5%90%8D%E8%AE%BE%E7%BD%AE%E7%9A%84%20Haproxy%20%E8%AE%BE%E7%BD%AE.png)
希望有人能帮忙确认这是否可行?我正在尝试将 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