本章說明將 Proxy Server 當成反向代理伺服器使用的方式。反向代理伺服器可用於防火牆之外,以做為外部用戶端的安全內容伺服器,避免在未受監視的情況下,從公司外部直接存取您的伺服器資料。反向代理伺服器也能用於複製;也就是說,可以將多部代理伺服器連接於使用頻繁的伺服器之前,以發揮負載平衡之功效。本章說明將 Proxy Server 用於防火牆內外部的替代方法。
本章包含下列小節:
您可以使用兩種不同的方法,來進行反向代理。第一種方法是利用 Proxy Server 的安全性功能來處理作業事件。第二種方法是利用快取在使用頻繁的伺服器上提供負載平衡功能。這兩種方法不限於在防火牆上運作,因此其使用方法與傳統的代理伺服器不同。
如果您的內容伺服器上有必須妥善保護的機密資訊,如信用卡號資料庫等,您可以在防火牆外設置代理伺服器做為內容伺服器的替代伺服器。當外部用戶端嘗試存取內容伺服器時,就會被改送至代理伺服器,而內容伺服器上真正的內容則會安全地保留在防火牆內。代理伺服器位於防火牆之外,而用戶端會將其視為內容伺服器。
當用戶端對網站提出請求時,該請求會被送至代理伺服器。接著代理伺服器會經由防火牆的特定通道,將用戶端的請求傳送至內容伺服器。內容伺服器會經由通道將結果送回代理伺服器。代理伺服器會將所擷取的資訊傳送至用戶端,就像代理伺服器是實際的內容伺服器一般,如圖 14–1 所示。若內容伺服器傳回錯誤訊息,則代理伺服器可截取訊息,並在將訊息傳送至用戶端之前,變更標頭所列的任何 URL。此運作方式可防止外部用戶端取得連結至內部內容伺服器的重新導向 URL。
代理伺服器以這種方式,在安全的資料庫和可能的惡意攻擊之間多加一道屏障。即使攻擊成功 (雖然不太可能),攻擊者所能擷取的內容也很可能僅限於單一作業事件的資訊,不太可能取得整個資料庫的存取權。未經授權的使用者無法進入實際的內容伺服器,因為防火牆通道僅允許代理伺服器存取實際的內容伺服器。
您可以對防火牆路由器進行配置,允許特定連接埠上的特定伺服器 (在此例中是指其指定連接埠上的代理伺服器) 取得通過防火牆的存取權,但不允許其他機器出入防火牆。
當代理伺服器和其他機器之間有一或多個連線採用安全通訊端層 (SSL) 協定來加密資料時,就能確保安全的反向代理。
安全的反向代理有多種用途:
為防火牆外的代理伺服器與防火牆內的安全內容伺服器之間,提供加密的連線
讓用戶端以安全的方式連線至代理伺服器,增強資訊 (如信用卡號) 傳輸的安全性
安全的反向代理會因資料加密時需要經常性耗用時間,而使每個安全連線的速度減緩。不過,因 SSL 提供快取機制,連線的雙方可重複使用先前所協議的安全性參數,而大幅縮短後續連線的經常性耗用時間。
用戶端與代理伺服器之間的安全連線。如果代理伺服器和內容伺服器之間所交換的資訊,不太可能或不可能遭未經授權的使用者存取 (如下圖所示),則這個方案就很有用。
代理伺服器與內容伺服器之間的安全連線。如果您的用戶端位於防火牆內部,而內容伺服器位於防火牆外部,則這個方案就很有用。在此方案中,您的代理伺服器可做為網站之間的安全通道,如下圖所示。
用戶端與代理伺服器以及代理伺服器與內容伺服器之間的安全連線。如果伺服器、代理伺服器和用戶端之間所交換的資訊都需要保密,則這個方案就很有用。在此方案中,您的代理伺服器由於有用戶端認證提供額外的安全性,因此能做為網站之間的安全通道,如下圖所示。
如需有關如何設定各項配置的資訊,請參閱設定反向代理伺服器。
除了 SSL 之外,代理伺服器也可以使用用戶端認證,此認證要求向代理伺服器提出請求的電腦提供憑證或其他形式的識別以驗證其身分。
您可以在組織內使用多部代理伺服器,以平衡 Web 伺服器之間的網路負載。此模型利用 Proxy Server 的快取功能來建立伺服器池,以進行負載平衡。在此例中,代理伺服器可以位於防火牆的任一側。若您的 Web 伺服器每天都會收到大量請求,則可以利用代理伺服器來分擔 Web 伺服器的負載,以提高網路存取的效率。
代理伺服器相當於用戶端請求與真實伺服器之間的媒介。代理伺服器會快取所請求的文件。若您有一部以上的代理伺服器,DNS 可以「循環」選取請求的 IP 位址,對各項請求進行隨機路由。用戶端每次都使用相同的 URL,但是每次請求所採取的路由可能每次都透過不同的代理伺服器。
使用多部代理伺服器來處理傳送至使用頻繁的內容伺服器之請求的優點是,伺服器可以更有效率的方式處理更大的負載,這是單一代理伺服器無法比擬的。代理伺服器在初次啟動期間會從內容伺服器擷取文件,之後傳送至內容伺服器的請求數量就會大幅減少。
只有 CGI 請求和偶而發生的新請求才必須送至內容伺服器。其餘請求都可由代理伺服器來處理。例如,假設傳送至伺服器的請求中有 90% 都不是 CGI 請求,表示您可以快取這些請求,而您的內容伺服器每天會接收 2 百萬次點閱。在此情況下,若您連接三部反向代理伺服器,而每部每天可處理 2 百萬次點閱,那麼每天總共可接收 6 百萬次點閱。至於每天從每部代理伺服器傳送至內容伺服器的 10% 請求約為 20 萬次點閱,表示總點閱次數只有 60 萬次,如此自然可以大幅提升處理效率。點閱次數可以從大約 2 百萬次增加為 6 百萬次,而內容伺服器的負載則相對從 2 百萬次減少為 60 萬次。但實際的結果會依照您的狀況而有所不同。
若要設定反向代理伺服器,則需要兩種對映:標準對映和反向對映。
標準對映會將請求重新導向至內容伺服器。當用戶端向代理伺服器請求文件時,代理伺服器會需要標準對映告知實際文件的取得位置。
請勿將反向代理伺服器和提供自動配置檔案的代理伺服器一起使用,因為代理伺服器可能會傳回錯誤的結果。
反向對映會指示代理伺服器針對從內容伺服器傳來的重新導向設置陷阱。代理伺服器會截取重新導向,然後變更重新導向的 URL 以對映到代理伺服器。例如,若用戶端所請求的文件已經移動或是找不到,則內容伺服器會將訊息傳回至用戶端,說明在所請求的 URL 上找不到文件。在傳回的訊息中,內容伺服器會增加 HTTP 標頭,列出要用來取得已移動檔案的 URL。為維護內部內容伺服器的私密性,代理伺服器可以使用反向對映以重新導向 URL。
假設您有一部名為 http://http.site.com/ 的 Web 伺服器,而您要為這部 Web 伺服器設定反向代理伺服器。您可以將反向代理伺服器稱為 http://proxy.site.com/。
存取 Server Manager,然後按一下 [URL] 標籤。
按一下 [Create Mapping] 連結。
這時會顯示 [Create Mapping] 頁面。
在所出現的頁面中,提供標準對映的來源前綴和來源目標,
例如,
來源前綴:http://proxy.site.com
來源目標:http://http.site.com/
按一下 [OK]。
返回頁面並建立反向對映,例如,
反向對映:
來源前綴:http://http.site.com/
來源目標:http://proxy.site.com/
若要變更,請按一下 [OK]。
當您按下 [OK] 按鈕時,代理伺服器就會增加一或多個附加對映。若要查看對映,請按一下 [View/Edit Mappings] 連結。附加對映的格式如下:
from: /
to: http://http.site.com/
這些附加的自動對映,適用於將反向代理伺服器當作一般伺服器連線的使用者。第一個對映用來擷取連線至反向代理伺服器以做為標準代理伺服器的使用者。只有當使用者未變更由管理 GUI 自動提供之 [Map Source Prefix] 文字方塊的內容時,才會增加「 /」對映。依據設定,通常只需要第二個對映,但是額外的對映並不會導致代理伺服器發生問題。
若 Web 伺服器具有多個 DNS 別名,則每個別名都必須具有對應的標準對映。若 Web 伺服器以其自身的數個 DNS 別名產生重新導向,則每個別名都應有一個對應的反向對映。
CGI 應用程式仍在原始伺服器上執行。代理伺服器本身決不會執行 CGI 應用程式。然而,若 CGI 程序檔指出,可發出 Last-modified 或 Expires 標頭暗示非零的存留時間以快取結果,則代理伺服器將會快取結果。
撰寫 Web 伺服器的內容時,請記住內容也是由反向代理伺服器提供服務的,因此 Web 伺服器上的所有檔案連結都應該是相對連結。請勿在 HTML 檔案中參照主機名稱。所有連結必須只包含頁面:
/abc/def
而非完全合格的主機名稱,如:
http://http.site.com/abc/def
您可以針對在反向代理伺服器模式中所發生的錯誤,提供自訂的錯誤頁面。這些錯誤頁面會置換代理伺服器所產生的錯誤。這樣可以防止用戶端得知您已配置代理伺服器。
設定安全的反向代理之前,您必須先熟悉數位憑證、憑證授權單位和認證。
設定安全的反向代理伺服器和設定不安全的反向代理伺服器,操作大致相同。唯一的差別是您必須為要加密的檔案,指定 HTTPS 做為通訊協定。
這個程序說明如何根據您所選擇的配置方案,設定安全的反向代理伺服器。下面示範對映的設定方式,這些說明假設您有一部名為 http.site.com 的 Web 伺服器,而您要設定名為 proxy.site.com 的安全反向代理伺服器。當您執行這些步驟時,請以您的 Web 伺服器和代理伺服器的名稱,取代指示中所使用的範例名稱。
存取 Server Manager,然後按一下 [URL] 標籤。
按一下 [Create Mapping] 連結。
這時會顯示 [Create Mapping] 頁面。
在所出現的頁面上,以下列方式設定標準對映和反向對映:
標準對映:
來源前綴:https://proxy.mysite.com
來源目標:http://http.mysite.com/
反向對映:
來源前綴:http://http.mysite.com/
來源目標:https://proxy.mysite.com/
儲存並套用變更。
若要查看您剛才所建立的對映,請按一下 [View/Edit Mappings] 連結。
您的代理伺服器必須在安全模式下運作,這項配置才會有作用。換句話說,必須啟用加密,且必須從指令行重新啟動代理伺服器。若要從指令行重新啟動代理伺服器,請移至代理伺服器目錄並鍵入 ./start。
存取 Server Manager,然後按一下 [URL] 標籤。
按一下 [Create Mapping] 連結。
這時會顯示 [Create Mapping] 頁面。
在所出現的頁面上,以下列方式設定標準對映和反向對映:
標準對映:
來源前綴:http://proxy.mysite.com
來源目標:https://http.mysite.com/
反向對映:
來源前綴:https://http.mysite.com/
來源目標:http://proxy.mysite.com/
儲存並套用變更。
若要查看您剛才所建立的對映,請按一下名為 [View/Edit Mappings] 的連結。
您的內容伺服器必須在安全模式下運作,這項配置才會有作用。
存取 Server Manager,然後按一下 [URL] 標籤。
按一下 [Create Mapping] 連結。
這時會顯示 [Create Mapping] 頁面。
在所出現的頁面上,以下列方式設定標準對映和反向對映:
標準對映:
來源前綴:https://proxy.mysite.com
來源目標:https://http.mysite.com/
反向對映:
來源前綴:https://http.mysite.com/
來源目標:https://proxy.mysite.com/
儲存並套用變更。
若要查看您剛才所建立的對映,請按一下名為 [View/Edit Mappings] 的連結。
您的代理伺服器和內容伺服器必須在安全模式下運作,這項配置才會有作用。換句話說,必須對代理伺服器啟用加密,且必須從指令行重新啟動代理伺服器。若要從指令行重新啟動代理伺服器,請移至代理伺服器目錄並鍵入 ./restart。
當將 Proxy Server 配置為反向代理伺服器時,依預設,它不會停止正向代理伺服器的作用。這樣的伺服器實例既接受反向代理請求又接受正向代理請求,並為其提供服務。需要進一步配置才能停用正向代理功能。您可以設定 ACL 配置,拒絕 URI 符合正向代理格式的請求。您可以使用用戶端指令來達到這個目的:
<Client uri="http://.*"> PathCheck fn="check-acl" acl="http://.*" <Client> . . . The "http://.*" ACL can be a deny all ACL as follows: . . acl "http://.*"; deny (all) user="anyone";
虛擬多重主機可以讓原始伺服器,如反向代理伺服器,回應多個 DNS 別名,如同在每個位址上安裝了不同的伺服器。舉例來說,假設您的 DNS 主機名稱為:
www
specs
phones
這三個主機名稱都可對映至相同的 IP 位址,即反向代理伺服器的 IP 位址。接著反向代理伺服器可依據存取其本身時所使用的 DNS 名稱,而做出不同的回應。
另外,虛擬多重主機也能讓您在單一反向代理伺服器中,放置多個不同的 *網域*。例如︰
www.domain-1.com
www.domain-2.com
www.domain-3.com
您可以將多個本地主機名稱和多個網域組合在單一代理伺服器中:
www
specs
phones
www.domain-1.com
www.domain-2.com
www.domain-3.com
虛擬多重主機的運作方式,是指定 DNS 主機和網域名稱或別名,然後再指定傳送至該主機名稱的請求,所應導向的目標 URL 前綴。舉例來說,假設您有兩個對映:
engr.domain.com -> http://int-engr.domain.com
mktg.domain.com -> http://int-mktg.domain.com
對映不一定是從根目錄到根目錄。您可以在目標 URL 中指定附加的 URL 路徑前綴:
engr.domain.com -> http://internal.domain.com/engr
mktg.domain.com -> http://internal.domain.com/mktg
這同樣適用於虛擬網域對映。例如,您可以使用:
www.domain-1.com -> http://int-engr.domain.com
www.domain-2.com -> http://int-mktg.domain.com
系統會查看 HTTP「Host:」標頭。系統會根據該標頭,選擇相符的虛擬多重主機對映。如果沒有相符的多重主機對映,伺服器會依據對映出現在配置檔案中的順序繼續查看其他對映。如果仍找不到相符的對映,伺服器將不執行對映。如果找不到相符的對映,代理伺服器通常會發出「代理拒絕執行請求」的回應。
存取 Server Manager,然後按一下 [URL] 標籤。
按一下 [Configure Virtual Multihosting] 連結。
這時會顯示 [Configure Virtual Multihosting] 頁面。
在 [Source Hostname (alias)] 欄位中,指定要套用此對映的本地主機名稱 (或 DNS 別名)。
在 [Source Domain Name] 欄位中,鍵入應套用此對映的本機網域名稱。
一般而言,這個名稱是您網路的網域名稱,除非您要針對多個不同的 DNS 網域使用多重主機。
在 [Destination URL Prefix] 欄位中,鍵入當主機和網域名稱與上述規格相符時,要將請求導向至的目標 URL 前綴。
若您使用範本,請在 [Use This Template] 下拉式清單中選擇範本名稱,若您不想套用範本,則將此值保留為 NONE。
按一下 [OK]。
按一下 [Restart Required]。
此時會顯示 [Apply Changes] 頁面。
按一下 [Restart Proxy Server] 按鈕以套用變更。
針對您要建立的每個虛擬多重主機對映,重複執行上述步驟。
所有虛擬多重主機對映都會出現在 [Configure Virtual Multihosting] 頁面的底端。[Source Hostname (alias)] 和 [Source Domain Name] 欄位以及代理伺服器的連接埠號會合併起來,成為單一的常規表示式,以用來比對「主機:」標頭。
例如,若您的主機名稱為 www,網域為 example.com,連接埠號為 8080,則會出現下列常規表示式:
www(|.example.com)(|:8080)
此常規表示式保證與使用者可能鍵入的下列所有可能組合,或用戶端可能傳送的下列所有可能組合相符。即使該連接埠號並非 80,有些用戶端軟體仍可能加以省略,因為伺服器已經在該連接埠上進行偵聽。
www
www:8080
www.example.com
www.example.com:8080
在配置反向代理伺服器對映之前,您必須先停用用戶端自動配置功能。用戶端自動配置功能適用於正向代理伺服器作業,而非反向代理伺服器。
虛擬多重主機功能會建立自動反向對映。請勿針對使用 [Virtual Multihosting] 頁面所提供的對映建立反向對映。
虛擬對映是以 obj.conf 檔案中的 virt-map 函數指定。
虛擬對映是依據 obj.conf 配置檔案中所指定的順序進行比對。若標準對映、反向對映、常規表示式對映或用戶端自動配置對映出現在虛擬對映之前,則會優先套用這些對映。同樣地,若未在虛擬對映中找到相符對映,則會繼續對 obj.conf 中虛擬對映區段之後的下一個對映進行轉換。
依照規格的順序,反向對映應出現在其他對映之前。
若代理伺服器的連接埠號有所變更,則必須重新建立虛擬多重主機對映,以採用新的連接埠號。