Nginx 是什麼
Nginx 是一款 C 語言編寫高效能 Web 伺服器,反向代理伺服器。佔用記憶體少、併發能力強
使用場景
nginx主要有以下 4 個使用場景
- 作為 Http 伺服器,可以提供靜態網頁和靜態資源的訪問
- HTTP代理快取,快取服務端請求資料
- 作為反向代理伺服器,將請求代理轉發
- 作為負載均衡伺服器,將請求代理轉發到多個伺服器(最主要的使用場景)有多種使用方式,配置權重、hash路由等等
整體架構與核心元件
Nginx 主要由一個 Master 程序 + N 個 Worker 程序組成
Master 程序不處理網路請求,而是負責與 Worker 程序的互動,主要有下面幾個功能:
- 載入、過載配置
- 載入、排程、監控、重啟 Worker 程序
- 不停機更新(實現原理:透過 Master 程序 fork 出新的 Master 子程序來實現)
Woker 程序主要用來處理網路請求,一般來說,建議 woker程序的數量 = CPU的核數
Nginx 實現高效能的原因
- 有多個 Worker 程序,各個程序處理請求互不影響
- 是基於非同步的、非阻塞的事件驅動模型,類似於 Java 的 NIO 模型,依賴作業系統底層的事件模型(BSD kqueue、Linux epoll 及 Solaris event ports)
- 有一個簡單的記憶體池模組,用來將多次想系統的記憶體請求合併成一次,從而降低 CPU 開銷