Nginx初步(反向代理/Web伺服器/輕量級)

麻辣小雞絲發表於2020-11-25

一、Nginx是什麼:

Nginx的定義:

Nginx (engine x) 是一個高效能的HTTP和反向代理web伺服器,同時也提供了IMAP/POP3/SMTP服務。

先來弄懂幾個定義:

(1)反向代理:

什麼是反向代理?什麼是正向代理?
反向代理隱藏真實伺服器,正向代理隱藏真實客戶端。

代理的關鍵,就是隱藏(類比於房屋代理,各種代理商,都是在買家與賣家之間的一層隔離,買家看不到真正的賣家,好像是在與代理直接做交易),隱藏真實的發出網路請求的一方。

我們常說的代理都是正向代理,正向代理隱藏真實的客戶端,由代理伺服器代替客戶端統一向伺服器傳送請求,伺服器不知道真實的客戶端是誰,伺服器只能看到客戶端的代理伺服器;
正向代理的典型應用是為在區域網內的客戶端提供訪問Internet的途徑。

反向代理隱藏的是服務端,www.baidu.com就是一個反向代理伺服器,我們向baidu傳送請求,只需要知道反向代理伺服器的IP地址即可,而它後面隱藏了成千上萬臺真實的伺服器。

(2) web伺服器:

常見的伺服器分為 web伺服器、應用伺服器。

Nginx、Apache是Web 伺服器,Tomcat是應用伺服器。

把它們的名字展開更好理解:

Web HTTP Server, Web Application Server。

如果你把web稱為“Web應用”,那麼處理web業務的伺服器就是“web應用伺服器”,用於處理業務邏輯;

而 “web伺服器”則主要是讓客戶端通過瀏覽器進行訪問,處理HTTP連線,所以是“Web HTTP Server”。

(3)輕量級:

web伺服器的重量級、輕量級指的是什麼?

一句話概括二者區別:

輕量級,就是在同等併發量時佔用更少的記憶體和資源。

之所以 Apache是重量級伺服器,而Nginx是輕量級伺服器,是因為:

Apache使用的是傳統的select網路IO模型,同步多執行緒,一個連線對應一個程式;

Nginx使用的是現代的epoll、kqueue網路IO模型,一個執行緒可以處理多個連線。

(4)靜態資源、動態資源:

簡而言之,靜態資源不需要去訪問後端資料庫,直接返回前端固定頁面即可,訪問效率高,但內容固定;動態資源需要訪問後端資料庫。

靜態資源:

可以理解為前端的固定頁面,這裡麵包含HTML、CSS、JS、圖片等等,不需要查資料庫也不需要程式處理,直接就能夠顯示的頁面,如果想修改內容則必須修改頁面,但是訪問效率相當高。

動態資源:

需要程式處理或者從資料庫中讀資料,能夠根據不同的條件在頁面顯示不同的資料,內容更新不需要修改頁面但是訪問速度不及靜態頁面。

(5)Apache、Nginx、Tomcat 比較:

Nginx: 負載均衡、反向代理、處理靜態檔案(速度高於Apache三倍以上);

Apache: 相對於Tomcat處理靜態檔案是它的優勢;

Tomcat: 處理動態檔案的HTTP請求;

真實開發中,一般採用的架構是 Nginx + Tomcat。

  • Nginx處理高併發的HTTP請求時效能有多優秀:
    (1)高併發:Nginx單機支援10W以上的連線,支援上限取決於記憶體,10W遠未封頂;
    (2)低記憶體消耗:1W個非活躍的HTTP Keep-Alive連線在Nginx中僅消耗2.5M記憶體,這是Nginx支援高併發的基礎。

2. Nginx的安裝:

(1)準備工作:

Linux 2.6以上核心(支援 epoll)、GCC編譯器(編譯 Nginx 原始碼)、PCRE庫(支援 nginx.conf 配置檔案中使用的正規表示式)、zlib庫(伺服器給客戶端傳送 HTTP 資料時進行壓縮)、OpenSSL(支援 HTTPS 安全傳輸)。

(2)Linux核心引數優化:

fs.file-max = 999999
net.ipv4.tw_reuse = 1  
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog
net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmem = 4096 32768 262142
net.ipv4.netdev_max_backlog
net.ipv4.rmem_default
net.ipv4.wmem_default
net.ipv4.rmem_max
net.ipv4.wmem_max
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn.backlog

(3)編譯安裝:

下載、解壓Nginx原始碼後:

./configure 
make
make install

./configure做了大量的幕後工作,包括檢測作業系統核心和已安裝的軟體、解析引數、生成中間目錄、根據各種引數生成C原始檔、生成Makefile檔案;

make 命令編譯上一步生成的Makefile檔案,生成目標檔案、二進位制檔案;

make install 命令根據第一步configure中的引數將Nginx部署起來。

(4)啟動與關閉Nginx:

//啟動:
cd /usr/local/sbin
./nginx

//關閉:
./nginx -s stop
或者
./nginx -s quit


參考連結:

反向代理為何叫反向代理
淺談Tomcat、Apache、Nginx的區別及優缺點
死磕Nginx系列 – Nginx入門
動態資源和靜態資源區別

相關文章