1. 程式人生 > >開源工具之Nginx

開源工具之Nginx

是什麼?

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 頭。
  • 穩定性高:用於反向代理,宕機的概率微乎其微