淺談 Nginx 基本配置、負載均衡、緩存和反向代理

nginx配置_均衡負載_緩存_Max行銷誌

前言

Nginx 是一個反向代理伺服器,就像是餐廳的櫃檯,接收所有客戶的需求後,分配給廚師處理。這樣的好處可以保護後方的 Web Server 被攻擊。同時,還可以提供負載平衡 (Load Balance)、快取以及 HTTPS 憑證等功能。

使用 Nginx 好處如下:

  1. 隱藏伺服器真實 IP
  2. 負載均衡
  3. 提高訪問速度:提供靜態內容和緩存服務
  4. 提供安全保障:更容易排查惡意軟體等

一. 安裝 Nginx

▍Mac 的朋友:透過 Homebrew 安裝 Nginx

▍Windows 的朋友:
透過Nginx 官方網站下載

▍Linux 的朋友:

二. 基本 Nginx 介紹

1. 基本操作 Nginx 指令

2. 查詢 Nginx 文件位置

3. Nginx 資料架構

4. Nginx 變數介紹

在 Nginx 配置中,變數只能存放字串,並在變數名前面加上 $,如下我們設定了變數 a 並將 hello 賦值給他。

內建變數 $ arg_XXX,可以取得 url 上的參數

關於更多的 Nginx 變數與執行順序介紹,可以參考此篇:agentzh 的 Nginx 教程(版本 2020.03.19)

三. 如何寫入新的 Nginx 配置

我們可以看到 /etc/nginx/nginx.conf 內最後面兩行,引入了 conf.dsites-enabled 兩個資料夾內的配置,代表了如果要寫入新的參數,可以在以下這三個地方新增:
1. nginx.conf
2. conf.d 資料夾內
3. sites-enabled 資料夾內

而新增的配置要寫在 nginx.conf 裡面,還是在 conf.d 或 sites-available 哪個比較適合呢?

關於 conf.d 和 sites-available 和 sites-enabled 的差異,參考以下此篇所獲得的答案如下:

  1. conf.d : 適合放置 global server 的 config
  2. sites-available:適合放置 virtual host 的 config,如果要暫停只需要移到 sites-enabled 就可以了
  3. sites-enabled:存放暫時不被使用的 config,放在這個 config 不會被觸發,如有需要啟動則移到 sites-available 即可

四. Nginx 配置教學

首先了解一下 nginx.conf 的預設配置,大致上可以分成以下幾塊:

  1. 全域性區塊:主要是設定一些影響Nginx伺服器整體執行的配置指令
  2. events 區塊:主要是設定 Nginx 伺服器與使用者的網路連結
  3. http 區塊:是配置中重要的部分,包含代理、緩存、日誌等功能都在這設定,而 http 區塊中還會包含了 server 區塊 和 location 區塊,這部分接下來會細談

1. http 區塊的詳細配置

  • listen 80; 代表監聽所有 ipv4 的位址
  • listen [::]80; 代表監聽所有 ipv6 的位址
  • server_name 是你的 Domain 名稱。由於 Nginx 可以用來開多個網站或反向代理多個服務,所以可以設定不同的 Domain
  • location 中則是指定對不同路徑要怎麼處理,針對 location 的寫法可以參考如下

▍location

2. 使用 Nginx 提供靜態內容

關於 Nginx Serving Static Content 的更多介紹,可以參考此篇:NGINX static file server – 小萬同學的程式筆記 – Medium

3. 實作 Nginx 緩存機制 Cache

在 Nginx 配置 expires 等同於在 HTTP Response Header 裡面加上一個 Expires 的字段,裡面就是這個 Cache 到期的時間

關於 Nginx 實作 Cache 的更多介紹,可以參考以下幾篇:
* 循序漸進理解 HTTP Cache 機制
* DevOps Nginx 設定 Cache 機制

4. 實作 Nginx 虛擬主機 Virtual Host

在比較小型的專案中為了節省資源,會將多個網站部署在同一台主機上,藉由不同的 domain,透過 Nginx 做出 Virtual Host 來運行。

關於 Virtual Host 的更多介紹,可以參考此篇:Nginx Virtual Host 設定教學 – Soul & Shell Blog

5. 實作 Nginx 負載平衡 load balance

▍Nginx 提供了以下三種 load balancing 方法:

  1. round-robin:預設值,會將請留輪流平均分配到每台伺服器上
  2. lest-connected:會將請求分配到目前連接數最少的伺服器上
  3. ip-hash:利用 hash-function 來決定使用者要被分配到的伺服器,此方法可以達到同一個使用者 (IP address) 每次連結的伺服器都是相同的

如果要從默認值 round-robin 方法改成 lest-connected 或 ip-hash 的方法,只需要在第一行加上lest_conn;ip_hash; 即可

▍分配權重 weight

weight 默認值為 1,以下的配置代表如果有 5 次新的請求,則會有 3 次被分配到 srv1 和分配各 1 次到 srv2 srv3 上

▍備份 backup

backup 代表,所有伺服器都掛掉之後,此伺服器才會生效

關於 load balancer 的更多介紹,可以參考此篇:Using nginx as HTTP load balancer

最後~

▍回顧本篇我們介紹了的內容:

  • 安裝 Nginx
  • 基本 Nginx 介紹
    • 基本操作 Nginx 指令
    • Nginx 文件位置
    • Nginx 資料架構
    • Nginx 變數介紹
  • 如何寫入新的 Nginx 配置
  • Nginx 配置教學
    • http 區塊的詳細配置
    • 使用 Nginx 提供靜態內容
    • 實作 Nginx 緩存機制 Cache
    • 實作 Nginx 虛擬主機 Virtual Host
    • 實作 Nginx 負載平衡 load balance

關於 Flask 教學的延伸閱讀:

▍關於 Flask教學系列目錄:

▍其他 Flask相關教學:

那麼有關於 淺談 Nginx 基本配置、負載均衡、緩存和反向代理 的介紹就到這邊告一個段落囉!有任何問題可以在以下留言~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *