在 Debian / Ubuntu 系列系统中,Nginx 的配置结构不是随意设计的,而是一套经过长期验证、非常适合生产环境的模型。
如果你真正理解了这套结构:
- 多站点管理会非常清晰
- 上线 / 下线站点不再紧张
- 不会再遇到“配置明明写了却不生效”的问题
本文会把这件事一次讲透。
一、Nginx 在 Debian / Ubuntu 下的默认设计
在这些系统中,Nginx 默认采用 两级站点配置结构:
/etc/nginx/
├── sites-available/
└── sites-enabled/
这不是多余设计,而是有明确分工的。
二、sites-available:站点配置的“仓库”
路径:
/etc/nginx/sites-available/
它的职责只有一个:
存放所有“可能会用到”的站点配置文件
特点:
- 可以放很多
.conf - 可以是草稿、未完成配置
- 可以暂时不用
- 放在这里 ≠ 生效
你可以理解为:
sites-available = 配置仓库 / 草稿箱
三、sites-enabled:真正被加载的配置
路径:
/etc/nginx/sites-enabled/
Nginx 能读到这个目录,是因为在主配置文件 nginx.conf 中,通常有这样一句:
include /etc/nginx/sites-enabled/*;
这句话的含义非常关键:
只有在
sites-enabled里的配置,Nginx 才会真正加载
也就是说:
sites-available:不加载sites-enabled:一定加载
你可以理解为:
sites-enabled = 已上线 / 已启用的站点
四、那为什么不直接把配置写在 sites-enabled?
这是很多新手都会问的问题。
答案是:可以,但不推荐。 原因主要有三点,而且都非常现实。
五、原因一:启用 / 禁用站点极其方便
使用软链接,你只需要两个命令:
启用站点
ln -s /etc/nginx/sites-available/a.conf /etc/nginx/sites-enabled/a.conf
禁用站点
rm /etc/nginx/sites-enabled/a.conf
特点:
- 不改配置文件内容
- 不改
nginx.conf - 不会误删原始配置
- 可随时恢复
这在生产环境里非常重要
六、原因二:这是 Debian 官方推荐模型
不仅 Nginx,Apache 也是同样的设计:
- sites-available
- sites-enabled
系统包、运维工具、自动化脚本,都默认你这么用。
如果你偏离这个结构:
- 后续维护成本会上升
- 别人接手时会很痛苦
- 某些工具会“假设错误”
遵循约定,比自定义更稳
七、原因三:避免“误加载半成品配置”
这是一个非常容易踩的坑。
如果你直接在 sites-enabled 里写配置:
- 写到一半
- 有语法问题
- 有未完成的 server 块
只要你一 reload:
nginx -t
systemctl reload nginx
Nginx 直接炸
正确姿势是:
- 在
sites-available里慢慢写 nginx -t本地检查- 确认没问题
- 再建立软链接上线
这样可以避免:
- 半成品配置被加载
- 紧急回滚困难
- 线上服务中断
八、ln -sf 到底做了什么?
你经常会看到这样的命令:
ln -sf /etc/nginx/sites-available/discourse-root.conf \
/etc/nginx/sites-enabled/discourse-root.conf
我们把它拆开来看。
ln 是什么?
ln = 创建链接
-s:symbolic link(软链接)
-s = 不复制文件,只创建“指向关系”
效果是:
sites-enabled/discourse-root.conf
└──→ sites-available/discourse-root.conf
修改任意一边,另一边自动生效。
-f:force(强制)
-f = 如果目标已存在,强制覆盖
好处:
- 不用先 rm
- 不怕重复执行
- 自动化脚本更安全
九、本质理解(非常重要)
你真正做的事情是:
用一个“开关文件”控制某个站点是否被加载
- 开关在:sites-enabled
- 实体文件在:sites-available
这是一种非常成熟的配置管理思想。
十、一个非常形象的比喻
sites-available= 应用商店里“已下载但未打开”的 Appsites-enabled= 手机桌面上“正在运行”的 App
你下载了 ≠ 你在用 你写了配置 ≠ Nginx 会加载
软链接 = 点了“打开”
十一、实战建议(经验总结)
- 永远在
sites-available写配置 - 永远用软链接控制启用
- 不直接编辑
sites-enabled里的文件 - 所有上线动作都可以回滚
这是长期维护 Nginx 的最佳实践。
十二、小结
如果你只记住一句话:
写配置 ≠ 启用配置 软链接 = 上线
理解这一点,你就已经超过了很多“会用但不懂”的 Nginx 用户。