conf.d 是主流发行版约定的配置目录,用于解耦主配置与站点配置;通过 include 指令加载 /etc/nginx/conf.d/*.conf 文件,支持按字典序控制加载顺序,单文件应只定义一个逻辑单元且不包含 events/http 根块。

nginx 的 conf.d 文件夹本身不是 Nginx 官方强制定义的结构,而是主流发行版(如 CentOS/RHEL、Ubuntu/Debian)和运维实践中约定俗成的配置组织方式,用于实现主配置与站点/模块配置的解耦。
conf.d 的作用与定位
它通常位于 /etc/nginx/conf.d/(Linux 发行版常见路径),作为 nginx.conf 中 include 指令的加载目标。主配置文件通过类似以下语句引入该目录下的所有 .conf 文件:
include /etc/nginx/conf.d/*.conf;
这种设计让新增虚拟主机、启用模块或调整全局策略时,无需直接修改 nginx.conf,降低误操作风险,也便于配置版本化和自动化管理。
命名与内容规范
为保障可读性、加载顺序和避免冲突,建议遵守以下惯例:
-
文件名以 .conf 结尾,例如
default.conf、api.example.com.conf;Nginx 只加载匹配*.conf的文件,其他后缀(如.bak、.old)会被忽略 -
避免无意义命名,如
1.conf或test.conf;推荐使用业务域名、服务名或功能标识,例如monitoring.conf、static-assets.conf - 单个文件只定义一个逻辑单元:一个虚拟主机、一组重写规则、一类 upstream 配置等;不建议把多个不相关的 server 块塞进同一个文件
-
不包含 events/http 根块:conf.d 中的文件应只包含能嵌套在
http块内的指令,如server、upstream、map;events、http、pid等顶层指令必须保留在nginx.conf中
加载顺序与覆盖逻辑
Nginx 按照字典序(ASCII 顺序)加载 conf.d/*.conf 文件,例如:
00-default.conf 10-api.conf 99-ssl-redirect.conf
这种命名可显式控制优先级。注意:
- 同名指令(如多个
client_max_body_size)以最后加载的文件为准,但仅限于同一作用域内生效;server 块内的设置不会覆盖 http 块中同名指令,除非显式继承或重写 - 若两个 conf 文件都定义了监听相同端口+主机名的
server,Nginx 启动时会报错:duplicate listen options for [::]:80或conflicting server name - 建议用
nginx -t验证语法,并用nginx -T查看最终展开的完整配置,确认实际加载效果
安全与维护建议
conf.d 是配置高频修改区,需兼顾安全与可维护性:
-
权限控制:确保
/etc/nginx/conf.d/及其下文件属主为root:root,权限为644(文件)和755(目录),防止非 root 用户篡改 -
禁用临时文件:不要将
.swp、.tmp或编辑器备份文件(如default.conf~)留在该目录,它们可能被意外加载并导致语法错误 -
配合 include 分层:复杂场景下,可在 conf.d 文件中再
include子目录(如include /etc/nginx/conf.d/includes/*.conf;),进一步拆分认证、缓存、日志等关注点 -
上线前校验:每次修改后执行
nginx -t,确认无误再nginx -s reload;避免因单个 conf 文件错误导致整站不可用










