泛解析服务器配置怎么做?从DNS记录到Nginx泛域名的实操要点
泛解析到底解决什么问题
泛解析服务器配置,说白了就是让一个域名下的所有子域名都指向同一台机器或同一个入口。比如你手里有 example.com,客户要 a.example.com、b.example.com,甚至用户自己注册后生成的随机前缀,逐个加 A 记录显然不现实。

通配符记录就派上用场了。在 DNS 管理后台加一条主机记录为 * 的 A 记录,指向服务器 IP,所有未单独定义的子域名就都会落到这个地址上。这个机制本身不复杂,难的是后续环节——流量进来了,Web 服务器得知道该给谁响应,证书得覆盖到那些没提前规划过的子域名。
我做 SaaS 项目那会儿,客户自助开通二级站点,一天能新增几十个前缀,全靠泛解析兜底。没这套配置,光 DNS 工单就能把人逼疯。
DNS 泛解析记录的添加与验证
各家 DNS 服务商的界面不一样,逻辑是通的。主机记录填 *,记录类型选 A,记录值写服务器公网 IP,TTL 一般给 600 秒左右,调试阶段可以再短一些,等稳定了再调大。
加完之后别急着配服务器,先用工具验证。Windows 下 nslookup 指定一个随机子域名,看返回的 IP 对不对;Linux 下用 dig 更直观:
dig random123.example.com +short,有 IP 返回说明通配符生效- 如果返回 NXDOMAIN,检查是不是存在冲突的显式记录或 CNAME
- 部分服务商对泛解析有单独的开关,添加后需要手动启用
有个细节容易忽略:泛解析和显式记录同时存在时,显式记录优先。这点在排查「某个子域名怎么不走泛解析」的时候很关键,先翻翻有没有人手工加过一条。
泛域名证书:泛解析服务器配置里绕不开的一环
HTTPS 普及之后,泛解析服务器配置就绕不开证书问题。普通单域名证书只能覆盖申请时填写的那个名字,通配符证书才能覆盖 *.example.com 这一层。
申请泛域名证书通常要走 DNS-01 验证,也就是在 DNS 里加一条 TXT 记录来证明域名控制权。Let's Encrypt 的 certbot 配合各云厂商的 DNS 插件可以自动化续期,命令大致是 certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com,手动模式每次续期都得加记录,适合一次性调试;生产环境建议用带 API 的插件走自动流程。
这里有个坑得提前说:通配符证书不覆盖多级子域名。*.example.com 管不到 a.b.example.com,如果业务有多级前缀需求,要么申请 *.*.example.com 这类(部分 CA 支持有限),要么上多域名证书。这点我踩过,当时排查了半天以为配置写错了。
Nginx 里怎么接住泛域名流量
DNS 把流量引到服务器,剩下的交给 Web 服务端。Nginx 的 server_name 支持通配符写法,匹配规则是从精确匹配到最长通配符再到正则,顺序不能乱。
典型配置长这样:
server_name ~^(?<sub>.+).example.com$;,用正则捕获子域名,方便在日志或业务逻辑里取用- 或者简单点写
server_name *.example.com;,适合不需要区分前缀的场景 - 泛解析站点和主站建议拆成两个 server 块,避免 location 规则互相干扰
如果后端是应用服务器,记得把捕获到的子域名通过 proxy_set_header 传下去,比如 proxy_set_header X-Subdomain $sub;,应用层据此做租户识别。日志格式里也加上这个变量,出问题的时候一眼能看出是哪个前缀的请求。
几个常见报错与排查顺序
配置完不生效,先分清楚是 DNS 层还是服务端层的问题。浏览器打开子域名,如果连 TCP 都建不起来,多半是 DNS 没生效或防火墙拦了端口。
证书报错的话,看浏览器提示是「证书不匹配」还是「证书过期」。不匹配基本是证书没覆盖该子域名,回去确认申请时写的通配符层级对不对。过期就查续期任务,cron 里有没有跑成功,日志在 /var/log/letsencrypt/ 下面。
还有一种情况:子域名能访问但返回了默认站点内容。这通常是 Nginx 匹配到了 default_server。检查一下是不是有别的 server 块先匹配上了,用 nginx -T 把完整配置打出来看一遍,比猜快得多。
最后提一句,泛解析服务器配置在测试环境验证通过后,上线前记得把 TTL 调回正常值,同时确认 DNS 服务商那边没有开启「泛解析防护」之类的开关,有些平台默认是关着的。