域名与 HTTPS 证书
装好之后最常见的两件事:换成自己的域名、上 HTTPS。再往后是绑多个域名、给分站配泛域名证书。
分站(子域名)要的是泛域名证书,和普通证书的申请方式不一样,直接看泛域名证书那一节。
一、绑定域名
第 1 步:解析到服务器
到你买域名的地方(阿里云、腾讯云、Cloudflare 等)添加解析:
| 记录类型 | 主机记录 | 记录值 |
|---|---|---|
| A | @ | 你的服务器 IP |
| A | www | 你的服务器 IP |
@ 是不带前缀的裸域名(abc.com),www 是 www.abc.com。两条都加,用户输哪个都能打开。
解析生效一般几分钟。验证:
ping abc.com能 ping 出你的服务器 IP 就成了(ping 不通但显示 IP 也算成功,很多服务器禁 ping)。
第 2 步:在服务器上绑定
光有 DNS 解析不够,服务器也得认这个域名,否则访问会打到默认站点或直接报错。
宝塔面板:网站 → 点你的站点 → 域名管理 → 添加 abc.com 和 www.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:
docker run -d --name faka -p 80:80 -p 443:443 -v acg_data:/data --restart unless-stopped ghcr.io/lizhipay/acg-faka:latest一条命令签好证书(换成你的域名和邮箱):
docker exec faka acg-ssl shop.abc.com [email protected]再加一条自动续期的定时任务(在宿主机上执行):
(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:一条命令就够了。域名排着写,最后跟邮箱,它们会签进同一张证书:
docker exec faka acg-ssl abc.com www.abc.com shop.abc.com [email protected]以后要加域名,把所有域名一起重新跑一遍 —— 漏掉的会掉出证书。另外只要有一个域名没解析过来,整张证书就签不下来。详见 Docker 安装。
宝塔:
- 网站 → 站点设置 → 域名管理,把所有域名都加进去
- SSL 里申请证书时,把所有域名都勾上一起签 —— 一张证书可以覆盖多个域名,漏掉哪个,那个域名访问就会报证书错误
让多个域名跳到主域名
多个域名同时能访问会分散 SEO 权重,通常让副域名 301 跳到主域名。宝塔里在伪静态最前面加:
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 防火墙也可能拦截回调,见网站设置里的自定义支付回调域名。
