代理伺服器和隧道

當瀏覽網際網路的不同網路時,代理伺服器和HTTP隧道便於訪問萬維網上的內容。代理可以位於用戶的本地計算機上,也可以位於用戶計算機和Internet上的目標伺服器之間的任何位置。本頁概述了有關代理的一些基礎知識,並介紹了一些配置選項。

有兩種類型的代理:轉發代理(或隧道或網關)和反向代理(用於控制和保護對伺服器的訪問以進行負載平衡,身份驗證,解密或緩存)。

轉發代理部分

轉發代理或網關或僅「代理」向客戶端或一組客戶端提供代理服務。互聯網上可能有數十萬個開放代理。它們存儲和轉發Internet服務(如DNS或網頁)以減少和控制組使用的帶寬。

轉發代理也可以是匿名代理,允許用戶在瀏覽Web或使用其他Internet服務時隱藏其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代理背後的客戶端如何使用SSL訪問網站(即HTTPS,埠443)。但請注意,並非所有代理伺服器都支持該CONNECT方法或僅將其限制為埠443。

另請參閱Wikipedia上的HTTP隧道文章。

代理自動配置(PAC)部分

一個代理伺服器自動配置(PAC)文件是一個JavaScript的函數,確定網路瀏覽器的請求(HTTP,HTTPS和FTP)是否直接去目的地或轉發到Web代理伺服器。PAC文件中包含的JavaScript函數定義了函數:

應將auto-config文件保存到.pac文件擴展名為的文件中:

proxy.pac文件

並且MIME類型設置為:

應用程序/ x-NS-代理自動配置

該文件由一個名為的函數組成  FindProxyForURL。下面的示例將在設置內部DNS伺服器的環境中工作,以便它只能解析內部主機名,目標是僅對不可解析的主機使用代理:

function FindProxyForURL(url, host) {
  if (isResolvable(host))
    return "DIRECT";
  else
    return "PROXY proxy.mydomain.com:8080";
}