Nginx的include指令是配置模块化落地的核心机制,启动或重载时原样插入目标文件内容到当前上下文,需严格遵循作用域(如http/server/location内)、路径以/etc/nginx为基准、按功能分目录(conf.d/upstreams/snippets等)并用数字前缀控制通配符加载顺序。

Nginx 的 include 指令不是语法糖,而是配置模块化落地的核心机制。它不执行变量替换、不支持条件判断,而是在 Nginx 启动或重载时,将目标文件内容**原样插入**到当前上下文位置,相当于静态文本合并。合理组织 include 结构,能让配置清晰、可复用、易协作。
作用域决定能放什么
include 必须写在合法的上下文中,否则会解析失败:
- 在 http 块内:可引入 upstream、server、log_format、map、gzip 配置等
- 在 server 块内:只能引入 location、rewrite、proxy_set_header 等 server 级指令
- 在 location 块内:适合复用 access 控制、缓存策略等片段
- 不能在 events 或全局块中引入 http 或 server 块——语法越界直接报错
路径规则必须搞清楚
路径不是“相对当前文件”,而是以 Nginx 主配置目录(通常是 /etc/nginx/)为基准:
- include mime.types; → 实际读取 /etc/nginx/mime.types
- include ./conf.d/api.conf; → 实际读取 /etc/nginx/./conf.d/api.conf(等价于 /etc/nginx/conf.d/api.conf)
- include ../shared/headers.conf; → 可向上跳转,只要权限允许且路径存在
- 含空格或特殊字符的文件名必须加引号:include "my app.conf";
典型目录结构设计
按功能维度拆分,比按环境或项目更稳定、更易维护:
- /etc/nginx/conf.d/:存放各虚拟主机的 server 块(如 blog.conf、admin.conf)
- /etc/nginx/upstreams/:集中定义 upstream 块,供多个 server 复用后端集群
- /etc/nginx/snippets/:存放可插拔的配置片段,如 ssl-params.conf、security-headers.conf
- /etc/nginx/modules/:放置 map、geo、limit_req_zone 等需在 http 块内提前声明的全局指令
通配符加载与顺序控制
使用 *.conf 很方便,但文件加载顺序影响最终行为(例如 rewrite 规则覆盖、SSL 参数优先级):
- Nginx 按文件系统字母序加载,00-default.conf 会先于 99-api.conf
- 建议用两位数字前缀控制加载优先级,避免隐式依赖出错
- 通配符不递归,/etc/nginx/conf.d/*/app.conf 不会被匹配
- 被 include 的文件无法单独用 nginx -t 测试,必须从主入口验证


















