如何使用伺服器名稱/別名通過 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 並傳遞任何標題,如站點名稱/別名?
此
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)。