代理伺服器和隧道
在瀏覽網際網路的不同網路時,代理伺服器和HTTP隧道有助於訪問全球資訊網上的內容。代理可以位於使用者本地計算機上,也可以位於使用者計算機和網際網路上的目標伺服器之間的任何位置。此頁面概述了有關代理的一些基本知識,並介紹了一些配置選項。
代理伺服器主要分為兩種型別:**正向代理**(或隧道、閘道器)和**反向代理**(用於控制和保護對伺服器的訪問,例如負載均衡、身份驗證、解密或快取)。
正向代理
正向代理、閘道器或簡稱“代理”為客戶端或一組客戶端提供代理服務。網際網路上可能存在數十萬個開放的正向代理。它們儲存和轉發網際網路服務(如DNS或網頁),以減少和控制組使用的頻寬。
正向代理也可以是匿名的,並允許使用者在瀏覽網頁或使用其他網際網路服務時隱藏其IP地址。例如,Tor透過多個代理路由網際網路流量以實現匿名。
反向代理
顧名思義,反向代理與正向代理的作用相反:正向代理代表客戶端(或請求主機)執行操作。正向代理可以隱藏客戶端的身份,而反向代理可以隱藏伺服器的身份。反向代理有幾個用例,其中一些是
- 負載均衡:將負載分配到多個Web伺服器,
- 快取靜態內容:透過快取靜態內容(如圖片)來解除安裝Web伺服器,
- 壓縮:壓縮和最佳化內容以加快載入時間。
透過代理轉發客戶端資訊
代理可以使請求看起來像是從代理的IP地址發起的。如果使用代理來提供客戶端匿名性,這將非常有用,但在其他情況下,原始請求的資訊會丟失。原始客戶端的IP地址通常用於除錯、統計或生成依賴於位置的內容。一種常見的公開此資訊的方法是使用以下HTTP標頭
標準化的標頭
Forwarded-
包含來自代理伺服器面向客戶端一側的資訊,這些資訊在代理參與請求路徑時會被更改或丟失。
或事實上的標準版本
X-Forwarded-For非標準-
識別透過HTTP代理或負載均衡器連線到Web伺服器的客戶端的原始IP地址。
X-Forwarded-Host非標準-
識別客戶端用來連線到您的代理或負載均衡器的原始請求主機。
X-Forwarded-Proto非標準-
識別客戶端用來連線到您的代理或負載均衡器的協議(HTTP或HTTPS)。
要提供有關代理本身的資訊(而不是連線到它的客戶端),可以使用Via標頭。
Via-
由代理(正向代理和反向代理)新增,並且可以出現在請求標頭和響應標頭中。
HTTP 隧道
隧道透過封裝資料將私有網路資料和協議資訊透過公共網路傳輸。HTTP隧道使用更高級別的協議(HTTP)來傳輸更低級別的協議(TCP)。
HTTP協議指定了一種名為CONNECT的請求方法。它啟動與請求資源的雙向通訊,並且可以用於開啟隧道。這就是客戶端在HTTP代理後面如何使用TLS(即HTTPS,埠443)訪問網站的方式。但是請注意,並非所有代理伺服器都支援CONNECT方法,或者僅將其限制為埠443。
另請參閱維基百科上的HTTP隧道文章。
代理自動配置 (PAC)
一個代理自動配置 (PAC)檔案是一個JavaScript函式,用於確定Web瀏覽器請求(HTTP、HTTPS和FTP)是直接轉到目標還是轉發到Web代理伺服器。PAC檔案中包含的JavaScript函式定義了該函式
自動配置檔案應儲存到以.pac副檔名命名的檔案:proxy.pac。
並將MIME型別設定為application/x-ns-proxy-autoconfig。
該檔案包含一個名為FindProxyForURL的函式。以下示例將在內部DNS伺服器已設定好,以便它只能解析內部主機名,並且目標是僅對無法解析的主機使用代理的環境中工作
function FindProxyForURL(url, host) {
if (isResolvable(host)) {
return "DIRECT";
}
return "PROXY proxy.mydomain.com:8080";
}
有關更多示例,請參閱代理自動配置 (PAC)。