搜索全站
安装部署 8 分钟阅读

WordPress 多站点子域名模式配置:泛域名解析与服务器设置

多站点子域名模式(shanghai.mimangfei.com)比子目录模式多一步:DNS 泛解析与服务器泛域名配置。本文讲解 SUBDOMAIN_INSTALL 常量、DNS 通配符记录、Nginx/Apache 的 server_name 通配写法、SSL 通配符证书申请,以及子域名模式的特殊限制与常见故障。

U
UFO_PF 2021-12-12 · 阅读 8 分钟
Wo 安装部署
阅读提示
本文约 2,850 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:子域名还是子目录,这是个架构问题

两种模式的取舍:

维度 子目录(/shanghai) 子域名(shanghai.mimangfei.com)
SEO 权重 继承主域,集中 相对分散,但独立性强
DNS / SSL 无需额外配置 需要泛解析 + 通配符证书
视觉独立感 弱 强
配置难度 低 中

如果你的子站是独立品牌或独立业务,子域名更合适;如果是同一品牌的城市分站或栏目,子目录对搜索更友好。

原理分析:子域名模式多了什么

技术上,区别只有一个常量:

define('SUBDOMAIN_INSTALL', true);   // 子域名
define('SUBDOMAIN_INSTALL', false);  // 子目录

但基础设施层面多了两件事:

  1. DNS 泛解析:*.mimangfei.com 必须都解析到服务器 IP,否则新子站建了也访问不了;
  2. Web 服务器泛域名:Nginx 的 server_name 要接受任意子域名,Apache 用 ServerAlias。

SSL 也要跟上:要么申请通配符证书 *.mimangfei.com,要么每个子站单独申请。

保姆级实操

第一步:DNS 添加通配符记录

在域名服务商处添加:

类型:A
主机记录:*
记录值:服务器公网 IP
TTL:600

验证:

nslookup random-test.mimangfei.com

应返回你的服务器 IP。注意:部分域名服务商(尤其国内)对泛解析有额外要求或不支持,需提前确认。

第二步:修改 wp-config.php

define('WP_ALLOW_MULTISITE', true);

后台 → 工具 → 配置网络 → 选择”子域名” → 安装,然后按提示写入:

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'mimangfei.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
define('COOKIE_DOMAIN', '.mimangfei.com');   // 关键:带前导点

COOKIE_DOMAIN 设成 .mimangfei.com(注意前面的点),这样登录 Cookie 在所有子域名之间共享,否则切换子站要反复登录。

第三步:Nginx 泛域名配置

server {
    listen 80;
    server_name mimangfei.com *.mimangfei.com;
    root /var/www/mimangfei.com;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }
}

关键是 server_name 里的 *.mimangfei.com。Nginx 支持前缀通配符(不支持 mimangfei.* 这种后缀通配)。

如果用 Apache:

<VirtualHost *:80>
    ServerName mimangfei.com
    ServerAlias *.mimangfei.com
    DocumentRoot /var/www/mimangfei.com
</VirtualHost>

第四步:SSL 通配符证书

Let’s Encrypt 的通配符证书只能用 DNS-01 验证,不能用 HTTP-01:

certbot certonly \
  --manual \
  --preferred-challenges=dns \
  -d mimangfei.com -d '*.mimangfei.com' \
  --server https://acme-v02.api.letsencrypt.org/directory

certbot 会要求你添加一条 _acme-challenge.mimangfei.com 的 TXT 记录。添加后等待生效再回车。

注意:手动方式的证书不会自动续期(需要再次手工加 TXT)。长期方案是用支持 DNS API 的插件(如 certbot-dns-aliyun、certbot-dns-cloudflare)。

第五步:创建子站并验证

网络管理 → 站点 → 添加新站点,地址填 shanghai,访问 https://shanghai.mimangfei.com/。

第六步:强制主域名(可选)

if ($host = 'mimangfei.com') {
    return 301 https://www.mimangfei.com$request_uri;
}

常见踩坑与失败案例

  1. 子站创建成功但打不开 —— DNS 泛解析未生效(等 TTL)或 Nginx 没配 *.。先 ping 随机子域名 确认解析,再确认 server_name。
  2. 切换子站反复要登录 —— COOKIE_DOMAIN 没设或没带前导点。
  3. 案例:某站启用子域名多站点后,Let’s Encrypt 通配符证书三个月到期,手动续期时忘了加 TXT 记录,全站(含所有子站)断 HTTPS。教训是通配符证书一定要配自动续期,否则到期就是全网事故。
  4. 主站已运行超过一个月 —— WordPress 官方对子域名安装有一条提示:站点创建超过一个月后,子域名模式会有兼容性警告(主要影响已有内容的 URL 冲突)。老站建议先评估。
  5. CDN 不识别泛域名 —— Cloudflare 等 CDN 默认只代理已添加的域名,需要在 CDN 侧也开通泛域名支持并配证书。
  6. 邮件与子域名的 SPF/DKIM —— 子域名发信需要在 DNS 补充对应记录,否则邮件进垃圾箱。

总结

子域名多站点相对子目录只多了”DNS 泛解析 + 泛域名 Web 配置 + 通配符证书”三件事,但证书续期是最大的运维风险点,务必配成自动。选型上,我的经验是:同一品牌下的分站用子目录(权重集中、配置简单),独立品牌或多语言站用子域名(独立性、便于按地区部署)。无论哪种,都请先在一台机器上把”创建子站 → 访问 → 备份 → 恢复”跑通再上生产。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。