設定檔結構與核心指令
Nginx 的所有功能,最終都會落在同一份 nginx.conf 裡。它是一個巢狀的區塊(context)結構,越外層的設定範圍越廣,內層可以覆寫外層的值。理解這個結構,看到任何 Nginx 設定檔都不會再感到陌生。
設定檔的巢狀結構
一份完整設定檔的骨架大致如下:
# main context:全域設定
worker_processes auto;
events {
# 連線處理相關設定
worker_connections 1024;
}
http {
# 所有網站共用的 HTTP 設定
include mime.types;
server {
# 一個網站(虛擬主機)
listen 80;
server_name example.com;
location / {
# 特定網址路徑的處理規則
root /var/www/html;
index index.html;
}
}
}
實務上很少把所有設定寫在同一個檔案裡,而是在 http 區塊用 include 載入其他檔案(例如每個網站一個檔案),方便管理:
常用核心指令
| 指令 | 所在 context | 說明 |
|---|---|---|
worker_processes |
main | worker process 數量,設為 auto 會依 CPU 核心數自動決定 |
worker_connections |
events | 每個 worker 可同時處理的連線數上限 |
include |
各處皆可 | 載入其他設定檔,用來拆分與重用設定 |
listen |
server | 監聽的連接埠與位址,例如 80、443 ssl |
server_name |
server | 這個 server block 要回應的網域名稱 |
root |
http / server / location | 指定對應的檔案系統根目錄 |
index |
http / server / location | 找不到明確檔名時預設要回傳的檔案 |
access_log / error_log |
各處皆可 | 紀錄檔路徑,排查問題的第一手資料 |
修改設定後如何安全套用
Nginx 的設定檔對縮排跟空白不敏感,但少一個分號 ; 或大括號沒對齊就會整份設定失效。因此每次修改後都應該遵守同一個流程:
reload 只會讓 master process 重新讀取設定並啟動新的 worker,既有連線會處理完才結束,因此不會像 restart 一樣造成短暫斷線。
最小可用設定範例
下面是一份可以直接運作、提供單一靜態網站的最小設定,後續章節會在此基礎上加入反向代理、負載平衡與 HTTPS: