- 分布式系統架構:技術棧詳解與快速進階
- 張程
- 819字
- 2020-08-13 13:45:35
4.4.2 反向代理
反向代理是指用代理服務器來接收Internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給Internet上請求連接的客戶端的過程。此時,代理服務器對外就表現為一個服務器。例如,客戶端訪問http://zachary.sh.cn/demo,但是zachary.sh.cn上不存在demo頁面,于是zachary.sh.cn反向代理到其他服務器讀取到demo頁面,然后將其作為自己的內容返回給用戶,用戶此時并不知道內容不是zachary.sh.cn的。

圖4-5 Nginx正向代理流程圖
反向代理服務器對于客戶端而言是原始服務器,客戶端向反向代理的命名空間中的內容發送普通請求,由反向代理服務器判斷向何處(原始服務器)轉交請求,并將獲得的內容返回給客戶端。
反向代理訪問zachary.sh.cn的過程,如圖4-6所示。

圖4-6 Nginx反向代理流程圖
如圖4-6所示,zachary.sh.cn服務器上沒有demo相關頁面,于是zachary.sh.cn服務器反向代理到Static服務器上并返回頁面相關信息。工作流程如下:
1)用戶通過域名發出訪問Web服務器的請求,該域名被DNS服務器解析為反向代理服務器的IP地址;
2)反向代理服務器接受用戶的請求;
3)反向代理服務器在本地緩存中查找請求的內容,找到后直接把內容發送給用戶;
4)如果本地緩存里沒有用戶所請求的信息內容,反向代理服務器會代替用戶向源服務器請求同樣的信息內容,并把信息內容發給用戶。如果信息內容是在本地緩存中,則還會把它保存到緩存中。
代理服務器只用于代理內部網絡對Internet外部網絡的連接請求,客戶機必須指定代理服務器,并將本來要直接發送到Web服務器上的HTTP請求發送到代理服務器中。不支持外部網絡對內部網絡的連接請求,因為內部網絡對外部網絡是不可見的。一個代理服務器若能夠代理外部網絡上的主機訪問內部網絡時,這種代理服務的方式就稱為反向代理服務。此時代理服務器對外就表現為一個Web服務器,外部網絡就可以簡單把它當作一個標準的Web服務器而不需要特定的配置。不同之處在于,這個服務器沒有保存任何網頁的真實數據,所有的靜態網頁或者CGI程序都保存在內部的Web服務器上。因此對反向代理服務器的攻擊并不會使得網頁信息遭到破壞,這樣就提高了Web服務器的安全性。