使用的環境

系統與使用工具
Centos 7.6
nginx/1.16.1

一、nginx.conf 設定檔內容

Nginx 的設定檔是 nginx.conf,檔案位置通常是在 /etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf

 ...                          #全區塊
 event                        #events區塊
{
  ...
}
 http                         #http區塊
{   
  ...                         #http全區塊 
  server                      #server區塊
  {
    ...                       #server全區塊
    loaction [PATTERN]        #location區塊
    {
      ...
    }
    loaction [PATTERN]       #location區塊
    {
      ...
    }
  }
  server                     #server區塊
  {
    ...
  }
  ...                        #http全區塊
}

二、nginx.conf 檔案結構

nginx.conf 一共由三部分組成:

  1. 全區塊
  2. events 區塊
  3. http 區塊
    • http 全區塊
    • 多個 server 區塊(包含 server 全區塊、多個location 區塊)

三、nginx.conf 檔案結構注意事項

  1. 同一個設定區塊中巢狀結構的設定區塊,各個之間不存在次序關係
  2. 高一級區塊中的指令,可以作用於本身所在的區塊和此區塊包含的所有低階級區塊。
  3. 如果某個指令在兩個不同層級的區塊中同時出現,則採用「就近原則」,即以較低層級區塊中的設定為準。

四、各區塊解釋

1. 全區塊

(1) 作用域是 Nginx 全域。
(2) 設定影響 Nginx 伺服器整體執行的設定指令。
(3) 通常設定包含:

  • Nginx 伺服器的使用者(群組)
  • 允許產生的 worker process 數
  • Nginx 處理行程 PID 儲存路徑
  • 紀錄檔的儲存路徑
  • 設定檔的引用

2. events 區塊

(1) 設定影響 Nginx 伺服器與使用者的網路連接。
(2) 通常設定包含:

  • 是否開啟對多 worker process 下的網路連接進行序列化
  • 是否允許同時接收多個網路連接
  • 選取哪種事件驅動模型處理連接請求
  • 每個 worker process 可以同時支援的最大連接數

3. http 區塊

這裡講的 「http 全區塊」 表示 http 自己的全區塊,意思是 http 區塊中不包含在 server 區塊的部分。

(1) 最重要的一部分,包含代理、快取、協力廠商模組設定、紀錄檔定義等絕大多數的功能。
(2) http 全區塊通常設定包含:

  • 檔案引用
  • MIME-Type 定義
  • 紀錄檔自訂
  • 是否使用 sendfile 傳輸檔案
  • 連接逾時間
  • 單連接請求數上限

4. server 區塊

(1) 此區塊和 「虛擬機器」的概念有密切聯繫,虛擬機器的技術使得 Nginx 伺服器可以在同一台伺服器上只執行一組 Nginx 處理行程,就可以執行多個網站。
(2) 每個 http 區塊包含多個 server 區塊,而每個 server 區塊就相當於一台虛擬主機,它內部可有台主機聯合提供服務,一起對外提供一組服務或網站。
(3) 通常設定包含:

  • 本虛擬主機的監聽設定
  • 本虛擬主機的名稱或 IP 設定

5. location 區塊

(1) 每個 server 區塊包含多個 location 區塊,嚴格來說,location 其實是 server 區塊的指令 (2) location 區塊的主要作用:

  • 對特定請求進行處理
    ex. Nginx 伺服器接收到的請求字串(server_name/uri-string),除去虛擬主機名稱或 IP 之外的字串(/uri-string)進行比對
  • 位置定向
  • 資料快取
  • 回應控制
  • 協力廠商模組設定

參考資料

  • Nginx技術手札:網頁伺服器應用全攻略