正向緩存代理
1. 正向代理和反向代理
代理主要用在網路連接方面,不同類型的代理用於不同類型的連接。有一些代理用於隱藏用戶的身份,而另外一些代理用於隱藏伺服器的信息。常見的代理類型有正向代理和反向代理。這兩種代理的名字有些相近,不過差別卻非常大。
正向代理也就是大家常說的「代理」。用戶向代理伺服器發送請求,代理伺服器從網路中檢索數據。正向代理最典型的應用場景就是繞過網路限制。比如你們學校或公司的網路限制訪問抖音,可以通過設置一台代理伺服器,然後不直接連接抖音的服務,而是走代理,讓代理來訪問抖音的服務。
目的服務收到的請求來源IP會是代理伺服器的IP,而不是用戶的IP。這使得代理伺服器可以提供一定的匿名性。
與正向代理功能相近的是NAT,兩者都可以通過私有IP地址提供互聯網訪問。不過這兩種技術在TCP/IP協議棧中的位置不同。NAT工作在網路層,而代理工作在應用層。對使用者來說,NAT對各種應用程序都是透明的;而使用代理則必須在應用程序中指定代理伺服器的主機地址。
比如,使用NAT訪問網頁,不需要在瀏覽器上進行任何配置;而要使用代理訪問網頁,必須要在瀏覽器中指定代理的IP地址,如果代理僅支持HTTP協議,則只能通過代理訪問Web伺服器,不能訪問FTP伺服器。
由於NAT並非針對應用程序,因此在訪問互聯網時,NAT提供了比代理更高的可伸縮性。不過,NAT無法提供基於用戶名和密碼的身份驗證。而代理支持身份驗證,可以配置代理伺服器僅允許特定用戶訪問互聯網。
Web代理是最常用的正向代理,用於代理HTTP請求。除了會把完整的url傳遞過去外,來自客戶端的請求與常規HTTP請求幾乎沒有什麼兩樣。下面是一個請求的例子:
代理伺服器收到請求後,向目標伺服器發起請求,並且返回響應,比如:
上面的例子只對HTTP協議生效。有一些Web代理允許通過HTTP CONNECT方法建立通信隧道,利用這個隧道,代理伺服器可以轉發任意TCP數據包。
通過CONNECT方法,客戶端要求HTTP代理伺服器將TCP連接轉發到所需的目的地;然後,伺服器代表客戶端向目標伺服器發起連接。伺服器建立連接後,代理伺服器將繼續與客戶端之間來回代理TCP數據流。在上面的過程中,只有初始的連接請求是HTTP,之後伺服器僅代理建立的TCP連接。
客戶端連接到代理伺服器,在請求中指定主機和埠,例子如下:
如果代理伺服器允許連接並且連接到指定的主機,返回2XX成功響應:
現在,客戶端發送到代理伺服器的所有數據都蔣被轉發給遠程主機。
流行的HTTP代理伺服器軟體有Haproxy、Apache、Squid等。
反向代理一般用於控制對專用網路上伺服器的訪問。它代表一個客戶端從一個或多個伺服器檢索資源,然後將這些資源返回給客戶端,好像資源源自代理伺服器本身一樣。
流行的Web伺服器經常使用反向代理功能,從而屏蔽HTTP功能「較弱」的應用程序框架。這里的「較弱」主要指的是處理大量負載能力比較弱,以及處理不同形式的請求格式的能力比較弱,比如HTTP協議就有HTTP(S)1.x,HTTP(S) 2.x多個版本。反向代理可以將HTTPS請求轉換為HTTP請求、暫時緩存請求以保護後端伺服器、處理一些cookie和會話數據等等。
反向代理是非常有用的。常見用途如下:
與正向代理充當關聯的客戶端與任意伺服器中介不同,反向代理是任意客戶端與關聯伺服器的中介。換句話說,正向代理代表客戶端,而反向代理代表伺服器。
2. 代理伺服器緩存的如何實現
你要做正向代理還是反向代理,正向代理需要用戶瀏覽器進行配置,反向代理需要先配置DNS伺服器,然後接受用戶瀏覽請求,轉發請求給遠程伺服器,當然,轉發過程中可以進行訪問控制操作,緩存部分我們最近也碰到了問題,現在的想法是用哈希表進行存儲,利用MD5加密進行哈希函數設計