工程師都該懂的程式通識 - PROXY
相信大家從小到大應該都會碰到代理伺服器,代理伺服器就像是我們生活中的代理人一樣,會代表著 Client 端或者 Server 端
我們就來進入正題吧
什麼是代理伺服器
在 10 年前,大家點開 ie 的頁面都是 Yahoo ,
網路速度不比現在,都需要等個一兩分鐘,
等個一兩次還好,不過等太多次難免會覺得很煩,
每次點開都需要重新發送請求,然後再等一次
這時候代理伺服器就出現了,代理伺服器就像是班代的角色,
會代替使用者去跟 Server 端發送請求,
並且將要來的資料在自己身上暫存一份,
等到下個使用者再來請求的時候,就將這份暫存提供給他
理解了什麼是代理伺服器的概念後,
我們來看正向代理伺服器跟反向代理伺服器就會簡易許多
正向代理伺服器 Forward Proxy
正向代理伺服器就跟我們上面提到的代理伺服器是一樣的概念,
代表 Client 端跟網路發送請求,網路會再將請求傳送給 Server
我們用個簡單的例子來說明:
當考試成績出來後,學生都要一個一個去找老師拿成績單,
不過一個一個去拿其實蠻麻煩而且沒有效率
這時候我們就可以推派班代去代替整班的學生跟老師拿成績單
生活中的應用
限制能連線的網站:
以前我們在上電腦課的時候,會想要偷偷連到遊戲網站上玩遊戲,
不過學校沒有那麼笨,在學校內的電腦,都會設定防火牆,
當防火牆有設定限制存取的網站,甚至是限制代理伺服器時,
我們就很難繞過這一層去遊戲網站了
保護使用者的資料
當使用者去瀏覽網站時,網站是可以存取到使用者的資訊的,
有了代理伺服器這個角色,使用者會透過代理伺服器去發送請求、接受回應,
所以網站只能知道代理伺服器的資料,並不會知道使用者的資料
反向代理伺服器
跟正向代理伺服器相反,反向代理伺服器代表的對象就會是 Server 端
我們用簡單的例子來說:
今天有一群人想跟政府陳情,這時候他們的請求會送給代表人,
代表人會再將這些請求丟給政府的各個機關
等各個政府機關決議好後,就會將結果傳送給代表人
由代表人告訴民眾結果
生活中的應用
- 保護 server
當 Server 的資訊赤裸的公開時,難免會受到攻擊,
而反向代理伺服器的角色就能當作 Server 端的擋箭牌,
避免 Server 端被攻擊
平衡負載
熱門網站像是 Google 、 Amazon ,一天可能會有上千萬名使用者進站
只有一個 Server 是不可能負荷得了短時間內有上萬個使用者
所以一次應該都會有多台 Server 在跑,
而代理伺服器的角色就會像是交通指揮,指揮哪些請求要去哪個 Server 避免 Server 崩潰
代理 SSL
當 Client 端發送請求出去後,需要經過 SSL 握手,確保雙方的身份是對的才可以進行下一步
反向代理伺服器就會幫 Server 充當代理,將加密過的 SSL 訊息解密,之後就會放行請求給 Server
Cache
當我們今天要瀏覽的網站是美國的網站,可能這網站的伺服器放在美國,
地區遙遠的關係會讓我們在存取的時間上拉長,為了把時間花在同一件事上(每次發送請求都要美國的伺服器拿資料),代理伺服器會將資料快取起來,
不管是正向代理伺服器還是反向代理伺服器,這兩種類都會提供資料快取,
會先將資料暫存在代理伺服器中,等到其他使用者需要存取相同的資料時,就會派上用場
而資料只會暫存一段時間,過一段時間就會消除。
本文同步發佈於作者的個人網站 NINGLAB。