在本教程中,您将学习如何在 WordPress Multisite 上安装 SSL 证书。整个过程分为两部分:先在服务器层面安装证书(类型取决于您的网络使用的是子目录、子域名还是独立域名),然后在 WordPress 内部强制整个网络使用 HTTPS。
您的 Multisite 需要哪种 SSL 证书?
WordPress Multisite 是 WordPress 的原生功能,可让您通过单一安装和控制面板创建并管理多个站点。您可以按三种布局之一来设置网络:子目录、子域名或独立域名。布局决定了您需要哪种证书,因为每种方式保护主机名的方式各不相同。如果您不确定自己的设置需要哪种证书,可以使用我们的 SSL 向导为您的项目和预算找到合适的产品。
以子目录形式的 Multisite
子目录(也称为子文件夹)是同一域名下的一个路径。例如:
- yoursite.com/blog
- yoursite.com/store
- yoursite.com/membership
由于每个子站点都位于同一主机名下,一个针对该域名的标准 SSL 证书即可保护整个网络。如果您的主域名已经运行在 HTTPS 上,子目录站点会自动得到保护,无需额外购买证书。
以子域名形式的 Multisite
子域名是位于根域名前面的一个部分。子域名是分隔网络各部分的一种实用方式。例如:
- blog.yoursite.com
- store.yoursite.com
- membership.yoursite.com
对于运行在子域名上的网络,通配符 SSL 证书是最合适的选择。一张通配符证书可以保护根域名及其下无限数量的一级子域名,全部包含在一张证书内。您可以随时添加新的子站点,它们会自动受到保护,无需重新签发证书。
注意:通配符证书只覆盖一级子域名。针对 *.yoursite.com 的证书可以保护 blog.yoursite.com,但不能保护 shop.blog.yoursite.com。如果您的网络嵌套的子域名达到这样的深度,需要单独为该层级做规划。
以不同域名形式的 Multisite
如果您希望每个子站点使用自己的自定义域名,首先需要进行域名映射。自 4.5 版本起,域名映射功能已内置于 WordPress 核心中,因此不再需要单独的映射插件。您可以在网络管理 > 站点 > 编辑中编辑子站点,将其站点地址(URL)设置为自定义域名(您的 DNS 和服务器必须已经将该域名指向该网络)来完成映射。
域名映射完成后,使用多域名 SSL 证书来保护它们。多域名证书(也称为 SAN 证书)默认覆盖多个不相关的域名,并可根据需要添加额外的 Subject Alternative Names,因此一张证书和一次续订即可保护整个网络。在同一个 IP 上托管多个 HTTPS 站点的服务器依赖 SNI(服务器名称指示)为每个主机名呈现正确的证书,目前所有主流浏览器和服务器都支持这一功能。
在服务器上安装证书
WordPress 本身不会安装证书。您需要在运行该网络的服务器或主机上安装证书,然后将 WordPress 切换到 HTTPS。具体步骤取决于您的环境:
- 托管或共享主机:在您的控制面板(cPanel、Plesk 或主机的 SSL/TLS 页面)中上传或粘贴证书、私钥和 CA 证书包。许多托管 WordPress 主机会为您安装和续订证书。
- Apache:在监听 443 端口的 VirtualHost 内,将 SSLCertificateFile 和 SSLCertificateKeyFile 指向您的完整证书链和私钥。具体指令请参见我们的安装指南。
- Nginx:在监听 443 的 server 块中设置 ssl_certificate(完整证书链)和 ssl_certificate_key。
还没有证书?使用我们的CSR 生成器生成申请文件,或者按照适合您平台的CSR 教程逐步操作。证书颁发机构签发文件并且您完成安装后,继续之前请使用我们的SSL 检测工具确认证书已生效。
在整个 Multisite 网络中启用 HTTPS
证书在服务器上安装完成后,最后一步是让 WordPress 通过 HTTPS 提供所有站点的服务。开始之前请先备份您的数据库和文件,因为这些更改会影响整个网络中的站点 URL。
第 1 步:将站点和主页 URL 更新为 https
在网络管理 > 站点中,打开每个子站点,进入设置选项卡,将 Siteurl 和 Home 从 http 改为 https。对于主站点,您也可以在其自己的设置 > 常规页面(WordPress 地址和站点地址字段)中进行设置。编辑后请保存每个站点。
第 2 步:强制后台和登录使用 HTTPS
编辑网络根目录中的 wp-config.php,在注释 /* That’s all, stop editing! Happy publishing. */ 上方添加以下这一行:
define( 'FORCE_SSL_ADMIN', true );
这样会使整个网络中的每一次登录和后台会话都通过 HTTPS 进行。只有在服务器上的证书已经正常工作之后才能添加此设置,否则后台管理区域可能会无法访问。
如果该网络位于终止 SSL 的反向代理或负载均衡器之后(在托管主机和 CDN 上很常见),WordPress 可能无法检测到 HTTPS,从而导致重定向循环。这种情况下,请在同一行上方添加以下代码,让 WordPress 信任转发的协议头:
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && strpos( $_SERVER['HTTP_X_FORWARDED_PROTO'], 'https' ) !== false ) {
$_SERVER['HTTPS'] = 'on';
}
第 3 步:替换数据库中硬编码的 http 链接
现有的文章、菜单和设置中通常存储着完整的 http 链接。运行一次搜索替换,将它们改为 https。最安全的工具是 WP-CLI,它能正确处理序列化数据,并可针对整个网络执行:
wp search-replace 'http://yoursite.com' 'https://yoursite.com' --network --skip-columns=guid --dry-run
查看试运行(dry-run)的输出结果,然后再次运行该命令,去掉 –dry-run 参数以应用更改。对于使用独立域名或子域名站点的网络,请对每个不同的域名重复此操作。如果您没有 WP-CLI 访问权限,一款维护良好的插件(例如 Better Search Replace)也可以在控制面板中完成同样的工作。请不要修改 guid 列,因为更改它可能会影响 feed 阅读器。
第 4 步:验证并(可选)设置重定向
逐一加载每个站点,确认地址栏中显示锁形图标,且浏览器控制台中没有混合内容警告。一款支持 Multisite 的强制 HTTPS 插件(例如 Really Simple SSL)可以帮您捕获任何残留的不安全请求,并为您添加从 HTTP 到 HTTPS 的重定向。您也可以在 Apache 或 Nginx 配置中,在服务器层面处理这一重定向。有关将站点迁移到 HTTPS 的完整说明,请参阅我们关于从 HTTP 切换到 HTTPS的指南。
现在,您的 WordPress Multisite 网络中的每个站点都已通过 HTTPS 提供服务。
常见问题
这取决于网络的布局方式。子目录网络只需要一张标准的单域名证书。子域名网络需要一张通配符证书来覆盖根域名及其子域名。由独立(已映射)域名组成的网络则需要一张列出所有域名的多域名(SAN)证书。
可以,只要证书类型与网络布局相匹配。一张标准证书可覆盖子目录网络,一张通配符证书可覆盖子域名网络,一张多域名证书则通过将每个域名列为 SAN 来覆盖由独立域名组成的网络。
安装在服务器上。证书、私钥和 CA 证书包是通过您主机的控制面板或直接在 Apache 或 Nginx 中安装的。WordPress 本身只需要在证书生效后,将站点 URL 切换为 https,并在 wp-config.php 中设置 FORCE_SSL_ADMIN。
在网络管理 > 站点中将每个站点的 Siteurl 和 Home 更新为 https,在 wp-config.php 中添加 define( 'FORCE_SSL_ADMIN', true );,然后运行一次搜索替换,将数据库中所有硬编码的 http 链接转换过来。一款支持 Multisite 的强制 HTTPS 插件可以帮您添加重定向并捕获残留的混合内容。
不需要。自 4.5 版本起,域名映射功能已成为 WordPress 核心的一部分。您可以在网络管理 > 站点 > 编辑中编辑子站点的站点地址(URL)来映射自定义域名,因此不再需要旧版的 MU Domain Mapping 插件。


