写给“站点一多就乱”的人
当 Nginx 从 1 个站点变成 5 个、10 个甚至更多 时,
真正拉开差距的,已经不是会不会写 server {},而是:
你能不能让自己和后来的人“一眼看懂”配置结构
这篇文章专门解决这个问题。
一、为什么“命名 + 排序”很重要?
Nginx 在加载站点时:
- 会 按 include 顺序读取文件
- 再 按 server_name / listen / default_server 决定匹配
如果你的文件名是这样:
a.conf
test.conf
new.conf
final.conf
final2.conf
那么:
- 你自己三个月后都看不懂
- 排查冲突非常痛苦
- 新加站点时容易“误命中”
多站点不是难,乱才是难
二、推荐的总体命名规则(核心原则)
推荐格式
序号-用途-域名.conf
例如:
10-root-noth.me.conf
20-docker.noth.me.conf
30-app.noth.me.conf
99-default-deny.conf
这个格式解决了三件事:
- 顺序可控
- 用途清晰
- 域名一眼可见
三、为什么一定要加“数字前缀”?
Nginx 的 include 顺序是:
include /etc/nginx/sites-enabled/*;
而 * 的顺序,本质上是 文件名排序顺序。
也就是说:
10-xxx.conf
20-yyy.conf
一定会先加载 10-,再加载 20-。
不加数字会发生什么?
app.conf
default.conf
docker.conf
加载顺序不可控:
- 跟字母
- 跟命名习惯
- 跟运气

数字前缀的实际意义
| 范围 | 含义 |
|---|---|
| 00–09 | 全局 / redirect / 保留 |
| 10–49 | 正常业务站点 |
| 50–89 | 特殊用途 |
| 90–99 | default / deny / 兜底 |
四、推荐的站点类型排序
HTTP → HTTPS 跳转(最前)
00-redirect-http.conf
通常只做一件事:
return 301 https://$host$request_uri;
核心业务站点
10-root-noth.me.conf
20-docker.noth.me.conf
30-app.noth.me.conf
一个站点 = 一个文件 绝不混写
后台 / 管理类站点
40-admin.example.com.conf
通常会加:
- IP 白名单
- Basic Auth
- 更严格策略
default / deny 兜底(最后)
99-default-deny.conf
防止:
- IP 直连
- 野生 Host 头
- 被扫命中
五、文件名里应该包含什么?
推荐包含
- 用途(root / docker / app / admin)
- 域名(避免点开才知道)
例如:
20-docker-noth.me.conf
不推荐这样命名
prod.conf
new.conf
v2.conf
final.conf
这些名字:
- 没信息量
- 三个月后必后悔
六、server_name 与文件名的关系
强烈建议:
文件名 = server_name
例如:
server_name docker.noth.me;
文件名:
20-docker.noth.me.conf
好处:
- grep / 查找极快
- 新人秒懂
- 不易误删
七、default_server 的排序技巧(重要)
兜底站点建议:
server {
listen 80 default_server;
server_name _;
return 444;
}
并放在:
99-default-deny.conf
这样可以确保:
- 所有未命中域名都被挡掉
- 不会抢正常站点
八、软链接命名是否也要一致?
是的,强烈建议一致。
推荐:
ln -sf \
/etc/nginx/sites-available/20-docker.noth.me.conf \
/etc/nginx/sites-enabled/20-docker.noth.me.conf
不要写成:
sites-enabled/docker.conf
九、一个“理想的”多站点目录示例
/etc/nginx/
├── sites-available/
│ ├── 00-redirect-http.conf
│ ├── 10-root-noth.me.conf
│ ├── 20-docker.noth.me.conf
│ ├── 30-app.noth.me.conf
│ └── 99-default-deny.conf
├── sites-enabled/
│ ├── 10-root-noth.me.conf -> ../sites-available/10-root-noth.me.conf
│ ├── 20-docker.noth.me.conf -> ../sites-available/20-docker.noth.me.conf
│ └── 99-default-deny.conf -> ../sites-available/99-default-deny.conf
十、经验总结(踩坑换来的)
- 数字前缀不是装饰,是控制顺序
- 文件名是给“未来的自己”看的
- 一个站点一个文件
- default 永远放最后
- 配置乱,问题一定迟早来