nginx 的 include 指令用于配置模块化,启动时原样插入指定文件内容,支持绝对路径和通配符,需注意作用域、重复定义及语法错误等限制。

Nginx 的 include 指令是实现配置模块化最直接、最常用的方式,它允许你把大段配置拆分成多个独立文件,按需加载,提升可读性、复用性和团队协作效率。
include 指令的基本用法
include 不是条件指令,也不解析变量,它在 Nginx 启动时(即配置加载阶段)将指定路径的文件内容原样插入到当前配置位置。语法很简单:
-
include /path/to/file.conf;—— 加载单个文件 -
include /etc/nginx/conf.d/*.conf;—— 支持通配符,按字母序加载匹配的所有文件 -
include sites-enabled/*;—— 常见于 Debian/Ubuntu 系统的站点启用机制
注意路径必须是绝对路径;相对路径以 Nginx 主配置文件(通常是 /etc/nginx/nginx.conf)所在目录为基准,但不推荐依赖相对路径,易出错。
典型模块化结构示例
一个清晰的模块化布局通常包含以下几类拆分:
-
全局设置:如
worker_processes、events、http块外的通用参数 → 单独存为global.conf -
HTTP 公共配置:MIME 类型、日志格式、超时、缓存策略等 →
http_common.conf -
安全与性能优化:如 HSTS、CSP、Gzip、Brotli、连接复用 →
security.conf、optimization.conf -
虚拟主机配置:每个站点一个文件,放在
sites-available/下,通过软链启用到sites-enabled/→ 如sites-available/example.com
主配置中只需几行 include 就能组织起来:
include conf.d/global.conf;include conf.d/http_common.conf;
include conf.d/security.conf;
include sites-enabled/*;
使用 include 的注意事项
虽然简单,但容易踩坑:
- 语法错误会中断整个加载:被 include 的文件哪怕只有一处括号不匹配或分号遗漏,Nginx 重载就会失败,报错指向该文件具体行号
-
作用域不能越界:比如在
server块里 include 一个定义了upstream的文件,会报错 ——upstream只能在http级生效 -
避免重复定义:例如多个 include 文件都写了
log_format main ...,Nginx 会拒绝启动(日志格式名冲突) -
通配符不递归:
include conf.d/**/*.conf不合法,Nginx 不支持多级通配,需显式写明层级或用脚本生成列表
配合 systemd 或脚本做轻量管理
生产中常配合自动化手段提升可靠性:
- 用
nginx -t验证修改后的所有 include 文件是否语法正确,再 reload - 写个小脚本检查
sites-enabled/中的软链是否指向sites-available/存在的真实文件 - CI/CD 流程中对 conf.d 下所有 .conf 文件做 lint(如用 nginx-config-formatter 或自定义正则校验)
模块化本身不增加功能,但让配置从“能用”走向“好管、好审、好迭代”。











