Nginx 配置其實只有兩類指令:
- 放在“某個塊”里的塊級指令;
- 直接寫在頂層的全局指令。
把全部配置想象成一個樹形結構,根節點叫 main,往下依次分叉即可。下面用 1 張 ASCII 樹 + 1 張極簡示例,30 秒就能看懂層級關系。
- 層級樹
main (全局)
├─ events { … } ← 連接處理模型
└─ http { … } ← HTTP 協議相關
├─ upstream { … } ← 負載均衡池(可選)
├─ server { … } ← 虛擬主機
│ ├─ location / { … } ← URL 路由
│ ├─ location /api { … }
│ └─ location ~ .php$ { … }
└─ server { … } ← 第二個虛擬主機
- 最小可運行示例
# 1) 全局塊 —— 影響整個 Nginx 進程
user nginx; # 工作進程的運行用戶
worker_processes auto; # 自動按 CPU 核數啟動進程
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;# 2) events 塊 —— 連接調度策略
events {worker_connections 1024; # 每個 worker 最大并發連接use epoll; # Linux 下高效事件模型
}# 3) http 塊 —— 所有 HTTP/HTTPS 服務共享的公共配置
http {include /etc/nginx/mime.types;default_type application/octet-stream;# 日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer"';access_log /var/log/nginx/access.log main;# 傳輸優化sendfile on;tcp_nopush on;keepalive_timeout 65;# 4) server 塊 —— 一個虛擬主機server {listen 80;server_name example.com;# 5) location 塊 —— URL 路由location / {root /usr/share/nginx/html;index index.html index.htm;}location /api {proxy_pass http://127.0.0.1:8080;}}
}
- 牢記 3 句話
? 全局塊、events、http 是“頂層文件”三大件;
? 一個 http 內可放 N 個 server,一個 server 內可放 N 個 location;
? 子塊繼承父塊,子塊同名指令覆蓋父塊。