Nginx 的 include 指令用于在 http 块中引入外部配置文件,提升可维护性与复用性;它在启动或重载时静态插入文本,支持绝对路径和通配符(如 *.conf),但不递归,且被包含文件语法必须合法、路径需正确并有读取权限。

Nginx 的 http 段中使用 include 指令,主要是为了将配置拆分到多个文件中,提升可维护性和复用性。它不是加载动态内容,而是编译时(Nginx 启动或重载时)把指定路径的配置文本原样插入到当前上下文中。
include 指令的基本语法和位置
include 必须写在 http 块内部(也可用于 server、location 等块),不能出现在全局或事件块中。语法很简单:
支持绝对路径,也支持通配符(如 *.conf),Nginx 会按字母顺序加载匹配的文件。
常见实用场景
-
按功能拆分配置:比如把 MIME 类型、Gzip 设置、日志格式等分别放在
mime.types、gzip.conf、log_format.conf中,再统一 include 进http块。 -
按站点分类管理:在
/etc/nginx/sites-enabled/下放每个虚拟主机的配置(如example.com.conf),然后用include sites-enabled/*.conf;加载,类似 Debian/Ubuntu 的默认做法。 -
环境差异化配置:通过符号链接切换不同环境(如
nginx.conf.production→sites-enabled),避免修改主配置文件。
注意事项和易错点
-
路径必须正确且 Nginx 有读取权限:如果路径不存在或权限不足,Nginx 启动会失败,并在错误日志中提示
open() "/path/xxx" failed (2: No such file or directory)或(13: Permission denied)。 -
被包含文件的内容必须语法合法:比如不能在
mime.types文件里写server { ... }—— 它只能包含types { ... }这类允许在http块中直接出现的指令。 -
通配符不递归:
include conf.d/**/*.conf;不生效,Nginx 不支持多级通配,需明确层级或用脚本生成扁平列表。 -
重载前务必测试:执行
nginx -t验证所有被 include 的文件语法是否正确,否则 reload 会中断服务。
一个典型 http 段 include 结构示例
假设主配置 /etc/nginx/nginx.conf 的 http 块如下:
include mime.types;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
# 其他全局设置…
server { … }
}
其中 mime.types 提供类型映射,conf.d/ 放通用模块配置(如 Gzip、超时),sites-enabled/ 放各虚拟主机配置 —— 这种分层方式清晰、易扩展。










