Skip to content

域名与 HTTPS 证书

装好之后最常见的两件事:换成自己的域名上 HTTPS。再往后是绑多个域名、给分站配泛域名证书。

分站(子域名)要的是泛域名证书,和普通证书的申请方式不一样,直接看泛域名证书那一节。

一、绑定域名

第 1 步:解析到服务器

到你买域名的地方(阿里云、腾讯云、Cloudflare 等)添加解析:

记录类型主机记录记录值
A@你的服务器 IP
Awww你的服务器 IP

@ 是不带前缀的裸域名(abc.com),wwwwww.abc.com。两条都加,用户输哪个都能打开。

解析生效一般几分钟。验证:

bash
ping abc.com

能 ping 出你的服务器 IP 就成了(ping 不通但显示 IP 也算成功,很多服务器禁 ping)。

第 2 步:在服务器上绑定

光有 DNS 解析不够,服务器也得认这个域名,否则访问会打到默认站点或直接报错。

宝塔面板:网站 → 点你的站点 → 域名管理 → 添加 abc.comwww.abc.com

Docker 部署:不用绑域名。镜像里自带 nginx,域名解析过来就能访问,证书直接在容器里申请,见 Docker 怎么上 HTTPS

二、申请 HTTPS 证书

宝塔(最省事)

网站 → 点你的站点 → SSL → 选 Let's Encrypt → 勾上要签的域名 → 申请。

签发成功后,务必打开「强制 HTTPS」 —— 否则 http:// 还是能访问,浏览器不会自动跳转。

证书 90 天有效,宝塔会自动续期,不用管。

申请失败怎么办

Let's Encrypt 签发前会访问 http://你的域名/.well-known/acme-challenge/xxx 做验证,这一步失败就签不下来:

现象原因
提示验证失败 / 404域名还没解析到这台服务器,或解析没生效
提示连接超时服务器 80 端口没开(云服务器要在安全组里放行 80)
套了 CDN 后签不下来先把 CDN 关掉签完再开,或改用 DNS 验证
一天内失败多次后一直失败Let's Encrypt 有频率限制,等一小时再试

程序自带的伪静态规则已经放行了 .well-known 目录,不会挡住证书验证。如果你自己改过伪静态,注意别把它挡掉,见伪静态规则

三、Docker 怎么上 HTTPS

镜像里已经带了 nginx 和 certbot,证书在容器里签,不需要面板、也不用另外起反向代理。

容器同时映射 80 和 443:

bash
docker run -d --name faka -p 80:80 -p 443:443 -v acg_data:/data --restart unless-stopped ghcr.io/lizhipay/acg-faka:latest

一条命令签好证书(换成你的域名和邮箱):

bash
docker exec faka acg-ssl shop.abc.com [email protected]

再加一条自动续期的定时任务(在宿主机上执行):

bash
(crontab -l 2>/dev/null; echo "0 3 * * * docker exec faka acg-ssl-renew") | crontab -

证书和 nginx 配置都写在数据卷里,换镜像、重建容器都不会丢。完整说明与排错见 Docker 安装

服务器上已经跑着别的网站、80 被占用时,才需要用前置反代把容器代理出去;那种情况下不要跑 acg-ssl,证书交给前面那层管。

已经有证书了(Cloudflare 源站证书、买的商业证书)?acg-ssl-import 直接装进去,不用申请 Let's Encrypt,泛域名也支持 —— 见 Docker 安装

四、绑定多个域名

一个站点绑多个域名很常见:换了新域名要保留旧的、或者主域名 + 短域名一起用。

先做这一步(两种部署都一样):每个域名都在 DNS 解析到同一台服务器 IP。

Docker:一条命令就够了。域名排着写,最后跟邮箱,它们会签进同一张证书:

bash
docker exec faka acg-ssl abc.com www.abc.com shop.abc.com [email protected]

以后要加域名,把所有域名一起重新跑一遍 —— 漏掉的会掉出证书。另外只要有一个域名没解析过来,整张证书就签不下来。详见 Docker 安装

宝塔

  1. 网站 → 站点设置 → 域名管理,把所有域名都加进去
  2. SSL 里申请证书时,把所有域名都勾上一起签 —— 一张证书可以覆盖多个域名,漏掉哪个,那个域名访问就会报证书错误

让多个域名跳到主域名

多个域名同时能访问会分散 SEO 权重,通常让副域名 301 跳到主域名。宝塔里在伪静态最前面加:

nginx
if ($host != 'abc.com') {
    return 301 https://abc.com$request_uri;
}

分站功能用到子域名时不要加这条,它会把所有分站域名也跳回主站。

五、泛域名证书(分站必需)

开了分站之后,商家的店铺地址是 xxx.abc.com。这类子域名是动态的、事先不知道有哪些,普通证书签不了,必须签泛域名证书 *.abc.com

和普通证书的区别

普通证书用 HTTP 文件验证(访问 /.well-known/...),泛域名证书只能用 DNS 验证 —— 需要在域名解析里加一条 TXT 记录来证明域名是你的。

宝塔怎么签

网站 → 站点 → SSL → Let's Encrypt → 验证方式选 DNS 验证

  • 如果你的域名在阿里云/腾讯云,宝塔支持填 API 密钥自动加 TXT 记录并自动续期,强烈建议用这种
  • 手动模式要自己去域名解析里加 TXT 记录,但每 90 天就要手动加一次,很容易忘了导致全站证书过期

域名要签的填两条一起签:

abc.com
*.abc.com

*.abc.com 不包含 abc.com 本身,必须两条都签,否则主站会报证书错误。

分站的完整检查清单

子域名打不开时,按这个顺序查(缺一不可):

#检查项
1后台 网站设置 → 其他设置 填了主站域名和 DNS-CNAME
2域名解析里加了 * 的泛解析记录,指向服务器 IP
3服务器上绑定了 *.abc.com(宝塔的域名管理里加这一条)——最容易漏
4签了 *.abc.com 的泛域名证书

详见分站模块

六、常见问题

浏览器显示「不安全」或证书错误 访问的域名没被证书覆盖。检查申请证书时是不是漏勾了这个域名;子域名要泛域名证书。

装了证书但 http:// 还能访问 Docker:acg-ssl 跑完强制跳转就已经开了,还能进说明证书没签成功或 nginx 没重载,重跑一次即可。宝塔:SSL 页面右上角打开「强制 HTTPS」。

开了强制 HTTPS 后打不开 / 无限跳转 用了 CDN 或反代时,回源方式与强制跳转打架:CDN 回源走 http,站点又强制跳 https,就绕不出来。把 CDN 的回源协议改成 HTTPS,或者把站点这边的强制跳转关掉、交给 CDN 做 —— Docker 是 docker exec faka acg-ssl 你的域名 你的邮箱 --no-redirect,宝塔是关掉「强制 HTTPS」。

换域名后前台图片、样式全乱 后台的站点域名还是旧的。到 网站设置 里把域名改过来,并清一下模板缓存(删除 runtime/view/compile 目录下的内容)。

支付回调失败 支付平台后台配的回调地址还是旧域名。另外 CDN 防火墙也可能拦截回调,见网站设置里的自定义支付回调域名。

基于 MIT 协议开源