nginx的include指令通过通配符*和绝对路径批量加载子配置文件,启动或重载时一次性原样插入内容,按ascii字母序加载(如00-common.conf→99-default.conf),需严格规范路径、分层管理目录并执行nginx -t验证语法。

Nginx 用 include 批量加载多个子配置文件,核心就是靠通配符 * 和路径规范。它不是运行时动态读取,而是在启动或重载时一次性把匹配的文件内容原样插入到当前配置位置,所以结构清晰、性能无损耗。
必须用绝对路径
Nginx 不接受相对路径(除非你明确知道主配置文件所在目录是基准,但极易出错)。比如你的主配置在 /etc/nginx/nginx.conf,那 include conf.d/*.conf; 实际查找的是 /etc/nginx/conf.d/*.conf —— 这容易误判。稳妥写法始终带根路径:
include /etc/nginx/conf.d/*.conf; include /usr/local/nginx/conf/sites-enabled/*.conf; include C:/nginx/conf/conf.d/*.conf; # Windows 下注意斜杠方向或用正斜杠
通配符按字母序加载,顺序很重要
Nginx 按文件名 ASCII 码顺序加载 *.conf,比如 00-common.conf → 10-api.conf → 99-default.conf。如果你依赖执行顺序(例如先定义 upstream 再在 server 中引用),就得靠命名控制先后。别指望随机顺序能稳定工作。
常见目录结构建议
按用途分层,避免混杂:
-
/etc/nginx/conf.d/:存放全局级配置片段(如ssl.conf、security.conf、logging.conf) -
/etc/nginx/sites-enabled/:启用的站点配置(每个文件一个server{}块) -
/etc/nginx/snippets/:可复用的小模块(如proxy-params.conf、cors-enable.conf)
然后在 nginx.conf 的 http { ... } 块末尾统一引入:
http {
# ... 其他基础设置(mime.types、log_format、sendfile 等)
include /etc/nginx/conf.d/*.conf; # 公共参数
include /etc/nginx/snippets/*.conf; # 可复用片段
include /etc/nginx/sites-enabled/*.conf; # 站点配置
}
Windows 和 macOS 路径写法差异小,但需留意
- Windows:推荐用正斜杠
/或双反斜杠\,路径如C:/nginx/conf/conf.d/*.conf - macOS/Linux:标准 Unix 路径,如
/usr/local/etc/nginx/conf.d/*.conf - Docker 环境:挂载路径以容器内视角为准,比如
-v $(pwd)/conf.d:/etc/nginx/conf.d
加载后务必验证语法再重载
改完 include 路径或新增子配置后,别直接 nginx -s reload:
nginx -t # 检查所有被 include 的文件是否语法合法 # ✅ 输出 "syntax is ok" 才继续 nginx -s reload
否则某个子配置里少了个分号、多了一层括号,整个 Nginx 都起不来。











