通常我們所說的代理,都是指的用戶端向外界發起請求時,并不是直接與目标伺服器連接配接,而是經過一個代理伺服器,将所有請求交給代理伺服器,由它去負責連接配接外界的目标伺服器,同時從伺服器傳回的資料,也經過代理伺服器,傳回到用戶端。在外界看來,所有請求都是來自這台代理伺服器,這樣就成功的将用戶端隐藏在自己身後,起到了一種保護用戶端的作用。
而『反向代理』卻是反過來的,它是針對伺服器的一種代理技術。反向代理伺服器可以接受用戶端的請求,然後将它分發到被代理的伺服器上,待這些伺服器處理完請求後,再将結果轉發給用戶端,它是将伺服器隐藏在自己的身後。從用戶端看來,它面對的隻有一台伺服器,但是背後可能有1000台伺服器在提供服務。
『反向代理』這樣做有什麼意義呢?
首先,它可以做『負載均衡』。比如說,對于同一個web服務,有10台伺服器可以提供服務,但是每台伺服器的負荷不太一樣,如果一個請求發送到負荷較高的伺服器,那麼它的處理時間可能會稍長一點,但是用戶端是不知道哪一台伺服器比較空閑,是以将請求發送到『反向代理』伺服器,它是知道每台伺服器的負載的,這樣由它将請求轉發到相對空閑的伺服器,以便更快的響應用戶端。
然後,它可以減輕後端伺服器的一些壓力,比如很多靜态資源或者緩存資料,可以直接放在反向代理伺服器上,不用将這些請求傳遞到後端伺服器,相對來說減輕了後端伺服器的壓力。
它還可以對請求做進一步的封裝和解封,比如想把所有請求更新到ssl加密連接配接,卻不想改造後端伺服器,那麼可以隻在用戶端-反向代理伺服器之間使用ssl加密連接配接,而代理伺服器-後端伺服器之間仍舊使用普通http連接配接,這樣就事半功倍了。
同時,反向代理伺服器還可以為後端伺服器阻擋一些網絡攻擊,提升背景伺服器的安全性。
總之,反向代理伺服器對于後端伺服器,就是一個接口人的角色,它接洽了所有用戶端的請求,并且進行簡單的處理,然後分發到後端伺服器。