nginx 配置文件初识全局块、events、http、server、location 的层级关系
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;
• 子块继承父块,子块同名指令覆盖父块。