開源工具之Nginx
阿新 • • 發佈:2018-12-16
是什麼?
Nginx是一個輕量級、高效能、穩定性高、併發性好的HTTP和反向代理伺服器。
功能
反向代理
Nginx作為反向代理器可以代表我們要訪問的目標伺服器。
Nginx作為代理伺服器的工作流程:
代理伺服器接收請求,然後將請求轉發給內部網路中叢集化的伺服器,後端伺服器將請求處理並返回結果給Nginx代理伺服器,Nginx再將結果轉發給客戶端。
期間有一個速度匹配問題:
由於客戶端和Nginx是通過公網傳輸,速度比較慢;Nginx和伺服器之間是內網或者線路傳輸,速度比較快。為了匹配後端伺服器與客戶端之間的速度匹配問題,通常在Nginx代理伺服器中會有一個快取。
處理方式
Nginx代理一次性接收客戶端所有HTTP包(完整)放在快取中,然後轉發給後端伺服器,伺服器處理後將結果返回給Nginx代理器,Nginx代理一邊接收一邊轉發給客戶端。
Nginx在反向代理上,根據不同的場景採用不同的轉發策略,靈活多樣。
負載均衡
在高併發情況下,將資料流分攤到多個伺服器執行,減輕每臺伺服器的壓力,多臺伺服器(叢集)共同完成工作任務,提高資料的吞吐量。
基本工作流程
- 先將大量的併發訪問或資料流量分擔到多臺節點裝置上分別處理,減少了使用者等待響應的時間
- 再將單個重負載的運算分擔到多臺節點裝置上並行處理,每個節點裝置處理結束後,彙總返回給使用者,系統處理能力提高
Nginx可使用的負載均衡策略有:
- 輪詢(預設):每個請求按時間順序逐一分配到不同的後端伺服器,如果端伺服器down調,能自動剔除
- 權重:指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均衡的情況。效能好的多分配,效能差的少分配。
- ip_hash(ip繫結):每個請求按訪問ip的hash結果分配,這樣訪客固定訪問一個後端伺服器,可以解決session問題。
- url_hash(第三方):按訪問的url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取是比較有效
- fair(第三方) :按後端伺服器響應時間來分配請求,響應時間短的優先分配
動靜分離
Nginx提供的動靜分離是指把動態請求和靜態請求分離開,合適的伺服器處理相應的請求,使整個伺服器系統的效能、效率更高。 Nginx可以根據配置對不同的請求做不同轉發,這是動態分離的基礎。 靜態請求對應的靜態資源可以直接放在Nginx上做緩衝,更好的做法是放在相應的緩衝伺服器上。 動態請求由相應的後端伺服器處理。
Nginx的特點
- 跨平臺:Nginx 可以在大多數 Unix like OS編譯執行,而且也有Windows的移植版本。
- 配置異常簡單,非常容易上手。配置風格跟程式開發一樣
- 非阻塞、高併發連線:資料複製時,磁碟I/O的第一階段是非阻塞的。官方測試能夠支撐5萬併發連線,在實際生產環境中跑到2~3萬併發連線數.(這得益於Nginx使用了最新的epoll模型)
- 事件驅動:通訊機制採用epoll模型,支援更大的併發連線。
- master/worker結構:一個master程序,生成一個或多個worker程序
- 記憶體消耗小:處理大併發的請求記憶體消耗非常小。在3萬併發連線下,開啟的10個Nginx 程序才消耗150M記憶體(15M*10=150M)
- 成本低廉:Nginx為開源軟體,可以免費使用。
- 內建的健康檢查功能:如果 Nginx Proxy 後端的某臺 Web 伺服器宕機了,不會影響前端訪問。
- 節省頻寬:支援 GZIP 壓縮,可以新增瀏覽器本地快取的 Header 頭。
- 穩定性高:用於反向代理,宕機的概率微乎其微