如何使用萬用字元虛擬主機引導反向代理請求
我對執行帶有 2-3 個虛擬機的反向代理感興趣。每個內部伺服器將執行多個虛擬主機,而不是在代理上手動配置每個單獨的虛擬主機(各種虛擬主機來來往往過於頻繁,這不切實際),我想使用可以在按順序查找合適的後端伺服器。例如:
Server 1: *.dev.mysite.com Server 2: *.stage.mysite.com Server 3: *.mysite.com, dev.mysite.com, stage.mysite.com, mysite.com Server 4: *
在上面的配置中,task.dev.mysite.com 到伺服器 1,dev.mysite.com 到伺服器 3,yoursite.stage.mysite.com 到伺服器 2,www.mysite.com 到伺服器 3,和yoursite.com 到伺服器 4。
到目前為止,我已經研究過使用 Squid、Varnish 和 nginx。我對它們各自的可取性和一般適用性有我的看法,但它們中的任何一個是否可以以這種方式處理動態伺服器選擇並且不需要每個虛擬主機配置,這並不明顯。另一方面,Apache 可以輕鬆簡單地做到這一點,但除此之外(除了眾所周知和熟悉之外)似乎非常不適合部分性能服務任務。
性能實際上還不是一個主要問題,但是如果另一個系統性能更好並且也可以處理所需的“免提”配置,那麼使用 Apache 似乎是愚蠢的。但是,經常不得不為所有生產服務調整網關並冒著全網中斷的風險……如果 Apache 成為一個太小的瓶頸,那麼以後也需要為自己設置更長的停機時間。
這些(或其他)反向代理中的哪一個可以/會做得最好?
也許我應該將此作為一個單獨的問題發布,但如果 Apache 是唯一實用的選擇,那麼 apache2.2(Ubuntu 12.04.1)中的 apache-mpm-event 的安全/可靠/可預測性如何,特別是對於專用的反向代理?據我了解,Event MPM 自 2.4 起被宣佈為“安全”,但尚不清楚在 2.4 中達到穩定性是否對各種發行版的官方/穩定包渠道中可用的舊 (2.2) 版本有任何影響。
Varnish 絕對可以做到這一點,如果這是你想做的。
您在 vcl 文件中定義後端,然後在 vcl_recv 中您可以使用一些正則表達式,如下所示:
if (req.http.Host ~ "\.dev\.mysite\.com$") { set req.backend = server1; elsif (req.http.Host ~ "\.stage\.mysite\.com$") { set req.backend = server2; elsif ...
我個人不會推薦使用相同的清漆伺服器進行登台和生產,我至少會在另一個埠上執行一個單獨的實例,但這既不是這裡也不是那裡。
就個人而言,我使用Pound。我會更詳細地介紹,但這個問題將作為購物問題盡快結束。
我重新設計了我的大部分前端伺服器以通過幾個 Pound 反向代理,這讓我大大降低了我的 SSL 證書成本和 IP 使用量。
我已經讓它們執行了大約 9 個月,沒有任何問題,所以我可以保證可靠性。
您還可以按照您想要的確切方式在設置中進行萬用字元匹配:
HeadRequire "Host: .*.dev.mysite.com*" HeadDeny "Host: .*.stage.mysite.com.*"