Nginx 配置文件结构
Nginx 的配置是层级化(块嵌套)的文本:外层块定义全局行为,越往内层作用域越小。理解"指令 + 上下文"是看懂一切 Nginx 配置的前提。
配置文件的默认位置
| 发行版 | 主配置 | 站点/模块目录 |
|---|---|---|
| Debian/Ubuntu | /etc/nginx/nginx.conf | /etc/nginx/conf.d/ 与 sites-available/ + sites-enabled/ |
| CentOS/RHEL | /etc/nginx/nginx.conf | /etc/nginx/conf.d/ |
主配置里通常有一行 include,把 conf.d/ 下的 *.conf 合并进来,实现"一站点一文件"。
从外到内的四级块
一个典型的 nginx.conf 自上而下是 main(全局)→ events → http → server → location:
worker_processes auto; # main 级:worker 进程数
events {
worker_connections 1024; # events 级:单个 worker 的最大连接数
}
http {
include mime.types; # 引入 MIME 类型映射文件
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server { # http 级:一个站点(虚拟主机)
listen 80;
server_name example.com;
location / { # server 级:按 URI 分流的配置块
root /var/www/html;
index index.html;
}
}
}
指令上下文的概念
每个指令都只能在特定层级使用,放错层级 nginx -t 会直接报错。常见指令的合法上下文:
| 指令 | 允许出现的块 |
|---|---|
| worker_processes | main(主配置顶层) |
| worker_connections | events |
| upstream、gzip、proxy_cache_path | http |
| listen、server_name、root | server(root 也允许 location) |
| proxy_pass、rewrite、try_files | location(部分也允许 server) |
规律:指令能写在哪取决于它对谁生效——针对连接的写 events,针对站点的写 server,针对具体路径的写 location。
目录约定:conf.d 与 sites-enabled
Debian 系同时提供两种组织方式:
- conf.d/*.conf:任何以 .conf 结尾的文件都会被主配置 include;
- sites-available/ 存全部站点配置,sites-enabled/ 里放指向前者配置的软链接——启停站点就是增删软链接:
sudo ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled/myblog
sudo nginx -t && sudo systemctl reload nginx
nginx -T:查看合并后的完整配置
include 层层展开后实际生效的配置长什么样?-T 会把整棵配置树打印到终端,排查"我改了怎么没生效"非常有用:
sudo nginx -T | less
# 输出:包含所有 include 进来的指令的完整配置
小结:Nginx 配置是"全局 → http → server → location"的嵌套结构;查配置按 nginx.conf → conf.d 的顺序,验证语法用 nginx -t,查看合并结果用 nginx -T。