前言
眾所周知,Nginx是現如今最熱門的反向代理服務器了,並且通Apache一樣都是屬於web服務器。Apache的主要優點是穩定和支持跨平台,但是受限於Apache誕生的年代較早,互聯網環境遠沒有現如今的復雜,所以Apache設計之初是重量級的並且不支持高並發。
正所謂時勢造英雄,於是支持高並發的Nginx就誕生了,Nginx是基於事件驅動架構,所以可以支持百萬級的TCP連接,Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作為一個HTTP服務器進行網站的發布處理,另外Nginx可以作為反向代理進行負載均衡的實現。
正向代理和反向代理
首先的了解什么是代理,一個代理過程涉及三個角色: 代理對象、被代理對象、目標對象,三個角色關系如下:
被代理對象委托代理對象訪問目標對象
以打官司為例,張三想要打官司於是請了李四律師幫忙打官司,那么張三就是被代理對象,不用親自打官司,而是委托代理對象李四律師;李四律師就是代理對象,代理張三打官司事務;而目標對象就是打官司。
正向代理
假設我們需要訪問國外的網站比如Google,此時可能通過國內的瀏覽器是如何直接訪問Google的,此時假設有一台服務器可以訪問Google,並且國內的客戶端可以訪問這台服務器,那么就可以將這台服務器叫做正向代理服務器。
國內客戶端將請求發送給代理服務器,代理服務器再將請求發送給Google,此時就完成了一次正向代理的過程。
如下圖示:
可以發現正向代理有幾個特點:
1、客戶端明確知道要訪問的具體服務器地址
2、目標服務器不知道客戶端信息,只知道所有請求都是由代理服務器發送過來的。
3、客戶端需要配置代理服務器信息
所以正向代理代表的是客戶端,代客戶端發送請求。客戶端將請求發送給代理服務器,代理服務器將請求轉發給目標服務器,目標服務器將請求結果返回給代理服務器,代理服務器再將結果返回給客戶端。
正向代理的用途
1、訪問原本無法訪問或不想直接訪問的資源,比如訪問國外資源等;
2、緩存,代理服務器可以將目標服務器的資源進行緩存,這樣客戶端可以直接從代理服務器獲取緩存數據;
3、管控客戶端行為,記錄客戶端請求日志等;
反向代理
以淘寶為例,為了應付高並發請求,淘寶服務器會采用集群的方式部署服務器,這樣客戶端就不知道將請求發送到哪一台服務器,假設有一台服務器可以根據規則來將客戶端請求進行轉發,那么就可以將這台服務器叫做反向代理服務器。
客戶端將請求發送給代理服務器,服務器根據轉發策略,選取一台服務器進行轉發,這樣就完成了一個反向代理的過程。
如下圖示:
可以發現反向代理有幾個特點:
1、客戶端並不知道要訪問的具體服務器地址,具體服務器地址是由代理服務器選擇的。
2、客戶端並不需要配置代理服務器信息,代理服務器對於客戶端而言是透明的
3、目標服務器是知道請求是由哪個客戶端請求過來的
所以反向代理代表的是服務器,代服務器接收請求,客戶端將請求發送給代理服務器,代理服務器將請求轉發給目標服務器,目標服務器將請求結果返回給代理服務器,代理服務器再將結果返回個客戶端。
反向代理的用途
1、保護服務器安全,服務器內網部署即可,而只需要將代理服務器暴露到外網
2、負載均衡,通過代理服務器來根據負載均衡策略維護服務器的請求數
總結
正向代理代理的是客戶端發送請求,客戶端和代理服務器處於同一個網絡環境,隱藏了客戶端信息
正向代理主要作用是訪問不可訪問的資源和統一管控客戶端請求
反向代理代理的是服務器接收請求,服務器和代理服務器處於同一個網絡環境,隱藏了服務器信息
反向代理主要作用是保護內網服務器和負載路由轉發