Nginx(二):Nginx能做什麼以及為什麼Tomcat不能做叢集?
反向代理
反向代理應該是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劃分的更細
動靜分離
通過前面對Nginx的瞭解,我們已經知道Nginx是一個http伺服器,也就是說它本身就是一個靜態資源的伺服器,所以我們可以把一個網站上的js,css,html,檔案等靜態資源交給Nginx處理(後面會有詳細的介紹)
實際上:
我們使用Nginx的真正核心原因是tomcat等伺服器是不能做叢集的,
原因:無他,當外部請求進來的時候,tomcat並不能對請求進行分發和排程!
末尾總結
- 能管理應用的所有介面,並且作為所有請求的總入口
- 能將請求轉發到目標伺服器,還能夠將處理好的資料返回給瀏覽器
- 具有管理負載均衡的多種策略:常用輪詢
- 能夠實現動靜分離,所有的靜態資源都可以交給Nginx響應,有效地減輕了Tomcat伺服器的負擔,讓其專心響應動態請求
- 最重要的一點;Nginx能夠完成Tomcat不能完成的叢集,原因是Tomcat不能進行請求的分發和任務的排程