我们有 5 个不同的服务器位置,每个位置大约有 30 台服务器,每台服务器代表一个 URL,并提供 HTTP 和 HTTPS 服务。它们都是相同的,但根据他们选择查看内容的位置提供不同的内容,他们可以通过更改用户设置来选择区域内容,我们将它们绑定到 DNS 中的绑定视图。
我们有一个 DNS 服务器,可以根据名称的位置将名称解析为 IP 地址,并将流量发送给它们。它工作得很好,但是当有人更改区域时,用户/浏览器/操作系统等之间会缓存一些东西,主要是 DNS 内容。
我们希望对每个域名使用相同的 IP 地址,并将所有内容解析到一组 HAProxy 服务器,这些服务器将根据其 IP 和用户配置在内部代理/路由流量。这样,DNS 将始终将它们指向相同的前端服务器,并允许其 DNS 缓存所有内容。
我想我可以使用 HAProxy 来做到这一点,因此当客户端连接到 blog.test.com 时,它会在前端服务器内部创建一个代理来表示我们的南非网站 blog.test.com - 但是,它需要通过 IP 地址来执行此操作,否则 DNS 会混淆..
我可以设置 HAProxy 来接受 blog.test.com 的连接并在内部连接到 1.2.3.4 并传递任何标头(如站点名称/别名)吗?
答案1
此haproxy
配置将会把连接顺利地路由到您的站点。
frontend portal
# site 1
bind 12.13.14.15:80
bind 12.13.14.15:443
# site 2
bind 12.13.14.16:80
bind 12.13.14.16:443
# ...
mode tcp
acl site1 dst 12.13.14.15
acl site2 dst 12.13.14.16
...
acl ssl dst_port 443
acl region1 src 82.0.0.0/7
...
use_backend site1_india_ssl if site1 region1 ssl
use_backend site1_india if site1 region1
use_backend site1_south_africa_ssl if site1 region2 ssl
use_backend site1_south_africa if site1 region2
...
use backend site2_india_ssl if site2 region1 ssl
...
您可以在每个位置的不同后端定义每个服务器,例如site1_india
,每个服务器都有一个 SSL 变体来使用端口 443。
mode http
可以,但我看不出它对你有什么帮助。你必须解密所有 SSL,和重新加密以便安全转发到相应的站点。
还要注意,采用这种设计,对于拓扑上距离实例较远的客户端来说,延迟将会非常高haproxy
,因为它们的包可能会往返于代理,然后再返回到本地应用服务器(可能靠近客户端)。
您可以通过haproxy
在每个位置添加一个实例来抵消这一点,以便客户端通常会使用本地代理(除非它们重新定位并依赖缓存的 DNS)。