Domain-Name-System

如何使用伺服器名稱/別名通過 IP 代理流量?

  • August 29, 2014

我們有 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 並傳遞任何標題,如站點名稱/別名?

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)。

引用自:https://serverfault.com/questions/623930