Nginx 是什麼?有哪些用途?
2023年2月4日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
何謂 Nginx?
Nginx 是一個非同步框架的網頁伺服器,可以做到
- 反向代理
- 負載均衡
- http 快取
Nginx 比起 Apache 屬於輕量級且高併發、處理靜態檔案的效率較高、耗費的記憶體較少、負載效能好,很適合做前端伺服器使用。
反向代理 Reverse Proxy
反向代理的好處在於能夠將 Client 不需知道 Application Server 的真實位置,僅需要透過 Nginx 反向代理的方式就能夠向後面的 Application Server 發送請求,而 Application Server 也不需要知道是哪一個 Client 的 Request,僅需回傳 Response 即可。(如下圖所示)
負載均衡 Load Balance
為了因應大流量,一台 Application Server 是無法應付的,因此會需要同時開多個 Application Server 。而 Nginx 能夠自動的將 Client 的 Request 分送到不同 Application Server 上,而分送的演算法可以自己設計,最常使用的是 Round Robin 演算法,而其他的演算法也包含 Least Connections 、Least Time 、IP Hash 等。
HTTP 快取
為了能夠提高效能,Nginx 會利用 http 快取的機制做優化。流程如下:
- Client 發出 Request ,Nginx 會將 Request 的資訊做 hash,並判斷此 hash key 是否存在於記憶體中:① → ②
- 若 hash key 不存在於記憶體中:Nginx 會向 Application Server 索取檔案位置,再去索取檔案。 ③ → ④ → ⑤
- 若存在於記憶體中:Nginx 會直接索取檔案。 ③ → ⑤
- 將檔案回傳給 Client