最近工作中用到反向代理,發(fā)現(xiàn)網(wǎng)絡代理的玩法還真不少,網(wǎng)絡背后有很多需要去學習。而在此之前僅僅使用了過代理軟件,曾經為了訪問google,使用了代理軟件,需要在瀏覽器中配置代理的地址。我只知道有代理這個概念,并不清楚代理還有正向和反向之分,于是趕緊學習一下,補充一下知識。首先弄清楚什么是正向代理,什么是反向代理,然后是二者在實際使用中展示的方式是什么樣的,最后總結一下正向代理用來做什么,反向代理可以做什么。
正向代理類似一個跳板機,代理訪問外部資源。
舉個例子:
我是一個用戶,我訪問不了某網(wǎng)站,但是我能訪問一個代理服務器,這個代理服務器呢,他能訪問那個我不能訪問的網(wǎng)站,于是我先連上代理服務器,告訴他我需要那個無法訪問網(wǎng)站的內容,代理服務器去取回來,然后返回給我。從網(wǎng)站的角度,只在代理服務器來取內容的時候有一次記錄,有時候并不知道是用戶的請求,也隱藏了用戶的資料,這取決于代理告不告訴網(wǎng)站。
客戶端必須設置正向代理服務器,當然前提是要知道正向代理服務器的IP地址,還有代理程序的端口。
總結來說:正向代理 是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發(fā)送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端??蛻舳吮仨氁M行一些特別的設置才能使用正向代理。
正向代理的用途:
?。?)訪問原來無法訪問的資源,如google
(2)可以做緩存,加速訪問資源
?。?)對客戶端訪問授權,上網(wǎng)進行認證
?。?)代理可以記錄用戶訪問記錄(上網(wǎng)行為管理),對外隱藏用戶信息
初次接觸方向代理的感覺是,客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者者并不知道自己訪問的是一個代理。因為客戶端不需要任何配置就可以訪問。
反向代理(Reverse Proxy)實際運行方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內部網(wǎng)絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個服務器。
反向代理隱藏了真實的服務端,當我們請求 的時候,就像撥打10086一樣,背后可能有成千上萬臺服務器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你只需要知道反向代理服務器是誰就好了,反向代理服務器會幫我們把請求轉發(fā)到真實的服務器那里去。
反向代理的作用:
(1)保證內網(wǎng)的安全,可以使用反向代理提供WAF功能,阻止web攻擊
大型網(wǎng)站,通常將反向代理作為公網(wǎng)訪問地址,Web服務器是內網(wǎng)。
(2)負載均衡,通過反向代理服務器來優(yōu)化網(wǎng)站的負載
借用知乎兩張圖來表達:https://www.zhihu.com/question/24723688
正向代理中,proxy和client同屬一個LAN,對server透明;
反向代理中,proxy和server同屬一個LAN,對client透明。
實際上proxy在兩種代理中做的事都是代為收發(fā)請求和響應,不過從結構上來看正好左右互換了下,所以把后出現(xiàn)的那種代理方式叫成了反向代理。
nginx支持配置反向代理,通過反向代理實現(xiàn)網(wǎng)站的負載均衡。這部分先寫一個nginx的配置,后續(xù)需要深入研究nginx的代理模塊和負載均衡模塊。nginx通過proxy_pass_http 配置代理站點,upstream實現(xiàn)負載均衡。