代理伺服器和隧道
在網際網路的不同網路之間導航時,代理伺服器和 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";
}