如何使用服务器名称/别名通过 IP 代理流量?

如何使用服务器名称/别名通过 IP 代理流量?

我们有 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)。

相关内容