Nginx的server_name支持前导或后缀通配符(如.example.com、example.),不支持正则式通配;需组合精确域名(如example.com .example.com)覆盖根域和一级子域,多级子域须用正则匹配(如~^..example.com$),且匹配优先级为:精确>最长前导通配>最长后缀通配>正则。

在 Nginx 中,server_name 支持使用 泛域名通配符(wildcard) 来匹配子域名,但有明确的语法规则和限制,不能随意写成 *.example.com 就生效。
通配符只支持前导星号或后缀星号
Nginx 不支持正则式通配(如 ~^.*\.example\.com$ 需用正则语法),其原生通配符仅允许两种形式:
-
*.example.com—— 匹配任意一级子域名,如www.example.com、api.example.com,但不匹配www.api.example.com或example.com(根域) -
example.*—— 匹配同级后缀,如example.org、example.net,实际很少用,且要求 DNS 可解析
必须配合精确域名或正则提升兼容性
单靠 *.example.com 无法覆盖所有常见访问场景。建议组合写法:
server {
server_name example.com *.example.com;
# 这样既响应根域,也响应所有一级子域
}如果还需支持多级子域(如 dev.www.example.com),必须改用正则匹配:
server {
server_name ~^(?<subdomain>.+)\.example\.com$;
# $subdomain 变量可后续用于 location 或 proxy_pass
}注意优先级与匹配顺序
Nginx 按以下优先级选择 server 块:
- 精确匹配(
server_name example.com) - 最长前导通配符(
*.example.com优于*.com) - 最长后缀通配符(
example.*) - 正则表达式(按配置文件中出现顺序,第一个匹配即停止)
所以不要把正则写在最前面却期望它被跳过;也不要在同一配置中定义冲突的通配规则(如同时写 *.example.com 和 www.example.com,后者会被前者覆盖)。
验证是否生效的简单方法
修改完配置后,先测试语法再重载:
nginx -t && nginx -s reload
然后用 curl -H "Host: test.example.com" 127.0.0.1 模拟请求,观察是否进入预期的 server 块。也可在日志中加 $host 或 $server_name 变量辅助调试。


















