Nginx 用 include 按业务线分目录管理子域名配置,核心是“按业务隔离 + 按上下文加载”:在 http 块内分层 include 公共配置、各业务目录(如 api/cms/portal)及兜底配置,子域名文件专注自身逻辑,共用项统一放 common 目录,启用禁用通过 sites-enabled 软链控制。

用 include 管理不同业务线的子域名,核心是“按业务隔离配置 + 按上下文加载”,不是简单把文件扔进去就完事。关键是让每个业务线能独立维护自己的 server 块,又不互相干扰、不改主配置。
按业务线建独立配置目录
别把所有子域名塞进一个 conf.d/,先按业务线分目录,比如:
-
/etc/nginx/business/api/—— 所有 API 类子域名(api.example.com、v1.internal) -
/etc/nginx/business/cms/—— 内容系统(cms.example.com、editor.example.com) -
/etc/nginx/business/portal/—— 门户站点(www.example.com、help.example.com)
每个目录下放对应业务的 .conf 文件,命名带业务前缀,如 api-auth.conf、cms-admin.conf。这样运维或开发查问题时,直接进目录就能定位,不用 grep 全局。
在 http 块中分层 include
include 必须放在允许出现 server 块的上下文里,也就是 http{} 内。主配置中这样写更清晰:
http {
# 公共基础项(log_format、upstream、SSL 默认参数等)
include /etc/nginx/common/*.conf;
<pre class="brush:php;toolbar:false;"># 各业务线配置,顺序即加载顺序,靠前的可被后覆盖(如变量、map)
include /etc/nginx/business/api/*.conf;
include /etc/nginx/business/cms/*.conf;
include /etc/nginx/business/portal/*.conf;
# 最后加兜底 server(可选,防未匹配域名)
include /etc/nginx/fallback.conf;}
注意:不要在 http 外写 include business/api/*.conf,否则 Nginx 会报错——那些文件里含 server,只能出现在 http 块内。
子域名配置里只写业务相关逻辑
每个业务线的 .conf 文件专注自身需求,避免跨业务耦合。例如:
-
api-auth.conf只定义server_name api.example.com,配 JWT 验证、限流、后端upstream,不写静态资源规则 -
cms-editor.conf专注上传路径、富文本资源代理、管理后台权限头,不碰 API 接口路由 - 共用的 SSL 证书路径、日志格式、gzip 设置,统一放在
/etc/nginx/common/ssl.conf或log_formats.conf,各业务include引用即可
这样新增一个 pay.example.com,只需在 /etc/nginx/business/api/ 下加个文件,改完 nginx -t 就生效,主配置和其它业务完全不动。
启用/禁用某业务线只需操作符号链接
生产环境建议用 sites-enabled 模式做开关,而不是删文件或加注释:
- 所有业务配置仍放在
/etc/nginx/business/下(源文件) - 在
/etc/nginx/sites-enabled/中创建软链:ln -s /etc/nginx/business/api/*.conf . - 停用 CMS?运行
rm /etc/nginx/sites-enabled/cms-*.conf,再nginx -s reload
主配置只写一行:include /etc/nginx/sites-enabled/*.conf;。这种做法灰度发布、回滚都快,也方便 CI/CD 自动化控制。











