反向代理
反向代理應該是Nginx做的最多的一件事了,什麼是反向代理呢,以下是百度百科的說法:反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。簡單來說就是真實的服務器不能直接被外部網絡訪問,所以需要一臺代理服務器,而代理服務器能被外部網絡訪問的同時又跟真實服務器在同一個網絡環境,當然也可能是同一臺服務器,端口不同而已。
簡單總結就是:
1.接口倉庫:反向代理服務器是外界訪問服務的總接口
2.對外總接口:真實服務器不對外暴露,地址全部保存在反向服務器中
3.請求轉發:外界訪問時,訪問的是反向服務器,反向服務器根據域名+URL判斷要訪問的服務,並將URL請求轉發到對應服務器
4.結果返回:當目標服務器處理完結果後,由反向服務器負責返回給瀏覽器搶
負載均衡
當同一個應用程序有兩個以上的服務器同時運行時,根據某種規則把請求分發到指定的服務器,這就是負載均衡。負載均衡一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。而這些規則就叫做負載均衡策略,Nginx提供一下幾種負載均衡策略:
1、輪詢 Round-Robin(默認):
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除
注:默認是隨機輪詢
2、weight:
指定輪詢機率,機率越大的後端服務器,請求分配越多
3、ip_hash:
每個請求按訪問ip的hash結果分配,這樣,每個訪客都訪問固定的後端服務器。同時,該負載均衡策略可以解決session同步問題
指定IP的請求交給專門的服務器處理,優點很明顯,缺點也是
4、fair(第三方):
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
簡單的來說:就是誰反應快就給誰
5、url_hash(第三方):
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。
比ip_hash劃分的更細:比如 www.shop.com/getConsumerList, 這個地址分給專門的服務器去處理
動靜分離
通過前面對Nginx的瞭解,我們已經知道Nginx是一個http服務器,也就是說它本身就是一個靜態資源的服務器,所以我們可以把一個網站上的js,css,html,文件等靜態資源交給Nginx處理(後面會有詳細的介紹)
實際上:
我們使用Nginx的真正核心原因是tomcat等服務器是不能做集羣的,
原因:無他,當外部請求進來的時候,tomcat並不能對請求進行分發和調度!
末尾總結
- 能管理應用的所有接口,並且作爲所有請求的總入口
- 能將請求轉發到目標服務器,還能夠將處理好的數據返回給瀏覽器
- 具有管理負載均衡的多種策略:常用輪詢
- 能夠實現動靜分離,所有的靜態資源都可以交給Nginx響應,有效地減輕了Tomcat服務器的負擔,讓其專心響應動態請求
- 最重要的一點;Nginx能夠完成Tomcat不能完成的集羣,原因是Tomcat不能進行請求的分發和任務的調度