最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 Server 配置如何设置 server_name 匹配多个域名与泛域名
时间:2026-08-24 11:32:48 编辑:袖梨 来源:一聚教程网
Nginx 的 server 块可通过 server_name 指令用空格分隔多个域名、单侧通配符(如 *.example.com)或正则(以 ~ 开头)实现多域名响应,但需确保 DNS 解析正确、Host 头匹配,并使用覆盖全部域名的 SAN 或泛域名证书。
在 Nginx 中,一个 server 块支持同时响应多个域名,关键就在 server_name 指令的写法——不是靠堆砌多个 server 块,而是用空格把域名列在一起,并合理使用通配符或正则。
多个精确域名直接空格分隔
这是最常用也最稳妥的方式。所有要指向同一站点的域名,写在同一行,中间只用空格隔开,不能加逗号、引号或换行:
server_name example.com www.example.com demo.site app.demo.site;- DNS 必须将这些域名都解析到这台服务器 IP
- 客户端请求中的
Host头必须与其中任一完全匹配(大小写不敏感) - 如果配置文件里只有这一个
server块,Nginx 会默认命中它,不管Host是什么
泛域名匹配有明确限制
Nginx 只允许单侧通配符,且只能出现在最左或最右,不能嵌套、不能多处出现:
- ✅ 合法:
*.example.com(匹配www.example.com、api.example.com) - ✅ 合法:
example.*(匹配example.com、example.cn) - ❌ 非法:
www.*.com、*.example.*、www..com - 推荐组合写法:
example.com *.example.com,兼顾主域和所有子域
正则匹配更灵活但需注意顺序
以 ~ 开头表示正则,可用于动态提取域名或统一处理多级结构:
-
server_name ~^(www.)?(.+)$;—— 匹配任意带或不带www的域名,捕获主域名到$2 -
server_name ~^([a-z0-9-]+).example.com$;—— 匹配所有合法二级子域 - 正则匹配优先级最低,只有在精确匹配和通配符都不中时才启用
- 正则表达式一旦启用,务必用
nginx -t测试语法,避免配置加载失败
HTTPS 场景下必须考虑证书覆盖
多个域名共用一个 server 块时,SSL/TLS 证书必须能覆盖全部域名:
- 用 SAN(Subject Alternative Name)证书,把所有域名都列进证书里
- 或用泛域名证书,比如
*.example.com,但注意它不包含example.com主域(除非显式加入) - 不要指望
example.com的证书能自动保护blog.example.com