nginx通过include指令+nginx -s reload实现子站点动态增减,无需重启服务:将各server块拆至独立.conf文件,用软链接管理启用状态,经语法检查后重载即可生效。

Nginx 本身不支持运行时“自动发现并加载新站点”,但可以通过 include 指令 + 配置重载机制,实现无需重启服务、手动或脚本触发即可增减子站点的效果。关键不在“自动”,而在“解耦配置 + 安全重载”。
✅ 把子站点配置分离到独立文件
把每个子站点的 server{} 块单独写成一个 .conf 文件(如 /etc/nginx/sites-available/site-a.conf),然后在主配置的 http{} 块中用 include 引入整个目录:
http {
# ... 其他 http 级配置(mime、log、upstream 等)
include /etc/nginx/sites-enabled/*.conf;
}
⚠️ 注意:
include路径必须是绝对路径;推荐使用sites-enabled/目录,通过软链接管理启用状态(类似 Debian/Ubuntu 默认做法),避免误删或误启。
✅ 增加子站点:三步完成(不重启)
写配置
在/etc/nginx/sites-available/下新建配置文件,例如blog.example.com.conf,内容包含完整server{}块。-
启用它
创建软链接到sites-enabled/:sudo ln -sf /etc/nginx/sites-available/blog.example.com.conf /etc/nginx/sites-enabled/
-
重载生效
执行:sudo nginx -t && sudo nginx -s reload
✅ 语法检查通过后,Nginx 主进程会平滑启动新工作进程,旧进程处理完请求后退出——全程无连接中断。
✅ 删除子站点:安全回退
-
禁用软链接
删除sites-enabled/下对应链接(不删sites-available/原文件,便于回滚):sudo rm /etc/nginx/sites-enabled/blog.example.com.conf
重载配置
同样执行nginx -t && nginx -s reload,该server块不再被加载,对应域名/路径立即 404 或由其他 server 块接管。
? 小技巧:可在
server_name中加入注释标记来源或上线时间,方便运维追踪:server { listen 80; server_name blog.example.com; # deployed by deploy-v2.3 @ 2026-07-20 # ... }
✅ 自动化增减(可选进阶)
若需对接 CI/CD 或服务发现系统(如 Consul),可用脚本生成 server{} 配置 → 写入 sites-available/ → 创建/删除软链接 → 自动 reload。只要确保:
- 所有生成的
.conf文件语法正确(建议每次写入后nginx -t校验) -
sites-enabled/下只保留有效链接,空文件或无效语法会导致nginx -t失败 - 不在
include路径中留废弃文件(*.conf通配会全部加载)
不复杂但容易忽略











