include 指令是 nginx 配置组织的骨架支点,需按功能分层、依上下文作用域、用前缀控序、以绝对路径或引号处理特殊名,并每次修改后执行 nginx -t 验证。

nginx.conf 里的 include 指令不是简单“拉文件进来”,而是配置组织的骨架支点。用好它,能让上百个站点、多种环境、几十种安全策略各归其位,改一处不牵动全局。
按功能分层加载,避免混杂
把不同职责的配置拆到独立目录,再在 http 块里分层 include:
-
基础共性:如 MIME 类型、日志格式、超时设置 → 放在
/etc/nginx/conf.d/base.conf,用include conf.d/base.conf; -
安全加固:HSTS、CSP、X-Frame-Options 等统一头 → 单独存为
/etc/nginx/snippets/security.conf,在 server 块内 include -
上游服务:多个 backend 集群定义 → 统一放在
/etc/nginx/upstreams/下,http 块末尾加include upstreams/*.conf; -
虚拟主机:每个域名一个文件 → 存于
/etc/nginx/sites-enabled/,用include sites-enabled/*;加载(推荐软链管理)
用前缀控制加载顺序
通配符按字母序加载,利用数字前缀明确优先级:
-
00-ssl-params.conf:SSL 公共参数(必须先加载,供后续引用) -
10-gzip.conf:压缩配置(依赖 MIME 类型已定义) -
90-rate-limit.conf:限流规则(通常放最后,避免被覆盖)
这样既保证指令生效顺序,又避免手动调整 include 行序。
跨上下文小心越界
include 不是万能粘贴,必须匹配当前块的作用域:
- 在
http{}块里可以 include 含upstream、map、log_format的文件 - 在
server{}块里只能 includelocation、rewrite或通用响应头等 server 级指令 - 不能在
location{}里 include 定义upstream的文件,会报 “invalid number of arguments” 或 “directive is not allowed here”
路径写法要稳,别靠猜
相对路径始终以 nginx.conf 所在目录为起点,不是以当前被 include 文件位置算:
-
include mime.types;→ 实际读取/etc/nginx/mime.types -
include ./snippets/headers.conf;→ 实际路径是/etc/nginx/./snippets/headers.conf - 含空格或特殊字符的文件名必须加引号:
include "my app.conf"; - 绝对路径最稳妥:
include /etc/nginx/conf.d/monitoring.conf;
每次修改后务必执行 nginx -t,错误会精准定位到具体被 include 文件的某一行。











