Nginx 是什麼?有哪些用途?

2023年2月4日

💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

何謂 Nginx?

Nginx 是一個非同步框架的網頁伺服器,可以做到

  • 反向代理
  • 負載均衡
  • http 快取

Nginx 比起 Apache 屬於輕量級且高併發、處理靜態檔案的效率較高、耗費的記憶體較少、負載效能好,很適合做前端伺服器使用。

反向代理 Reverse Proxy

反向代理的好處在於能夠將 Client 不需知道 Application Server 的真實位置,僅需要透過 Nginx 反向代理的方式就能夠向後面的 Application Server 發送請求,而 Application Server 也不需要知道是哪一個 Client 的 Request,僅需回傳 Response 即可。(如下圖所示)

Nginx 反向代理
Nginx 反向代理

負載均衡 Load Balance

為了因應大流量,一台 Application Server 是無法應付的,因此會需要同時開多個 Application Server 。而 Nginx 能夠自動的將 Client 的 Request 分送到不同 Application Server 上,而分送的演算法可以自己設計,最常使用的是 Round Robin 演算法,而其他的演算法也包含 Least Connections 、Least Time 、IP Hash 等。

Nginx Load Balance 機制
Nginx Load Balance 機制

HTTP 快取

為了能夠提高效能,Nginx 會利用 http 快取的機制做優化。流程如下:

  1. Client 發出 Request ,Nginx 會將 Request 的資訊做 hash,並判斷此 hash key 是否存在於記憶體中:① → ②
    1. 若 hash key 不存在於記憶體中:Nginx 會向 Application Server 索取檔案位置,再去索取檔案。 ③ → ④ → ⑤
    2. 若存在於記憶體中:Nginx 會直接索取檔案。 ③ → ⑤
  2. 將檔案回傳給 Client
Nginx Cache 機制
Nginx Cache 機制
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們