Nginx 配置其实只有两类指令:
- 放在"某个块"里的块级指令;
- 直接写在顶层的全局指令。
把全部配置想象成一个树形结构,根节点叫 main,往下依次分叉即可。下面用 1 张 ASCII 树 + 1 张极简示例,30 秒就能看懂层级关系。
- 层级树
main (全局)
├─ events { ... } ← 连接处理模型
└─ http { ... } ← HTTP 协议相关
├─ upstream { ... } ← 负载均衡池(可选)
├─ server { ... } ← 虚拟主机
│ ├─ location / { ... } ← URL 路由
│ ├─ location /api { ... }
│ └─ location ~ .php$ { ... }
└─ server { ... } ← 第二个虚拟主机
- 最小可运行示例
powershell
# 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;
• 子块继承父块,子块同名指令覆盖父块。