给 serv00 的 Hexo 博客绑定自有域名并签发 SSL 证书
serv00 默认给的是 用户名.serv00.net 这样的二级域名,能用但不够「自己」。本文承接前两篇(《devil 命令详解》《裸仓库 + 钩子自动部署》),讲清楚如何把自有域名绑定到 serv00 上的 Hexo 博客,并用 Let’s Encrypt 免费证书开启并维护 HTTPS。
一、整体流程概览
绑定域名 + HTTPS 的完整链条是:
1 | |
其中证书签发依赖「域名已正确解析到 serv00」,所以顺序很重要:先把 DNS 指过去,再签证书。
下面假设自有域名为 example.com,serv00 账号为 [email protected]。
二、第一步:查到 serv00 分配给你的「Web IP」
证书签发和 DNS 解析都要用到你账号的真实 IP。不要随便用别人的 IP,必须以下面命令列出的为准:
1 | |
这里有个极易踩的坑:devil vhost list 通常会返回三个 IP,它们用途不同,配 DNS 和签证书只能用其中的「Web IP」:
| IP(示例) | RevDNS | 用途 |
|---|---|---|
| 188.68.248.8 | s15.serv00.com | 主机 / SSH 登录入口,不是网站 IP |
| 188.68.250.201 | web15.serv00.com | Web 服务器 → A 记录与签 SSL 都用这个 |
| 188.68.250.202 | cache15.serv00.com | 缓存服务器,不直接使用 |
也就是说:SSH 登录用的 sXX.serv00.com 那个 IP,和网站用的 IP 不是同一个,千万别混用,否则证书签不下来、域名也解析不到站点。
最可靠的判断方法:看你现有的 用户名.serv00.net 域名实际解析到哪个 IP,那个就是 Web IP:
1 | |
记下这个 Web IP(下文统一记为 <WEB_IP>),后面配 DNS 和签证书都用它。
三、第二步:在域名服务商处配置 DNS 解析
到你买域名的地方(阿里云 / Cloudflare / Namecheap 等)添加解析记录,把域名指向上一步的 serv00 IP:
| 主机记录 | 类型 | 记录值 | 说明 |
|---|---|---|---|
@ |
A | <WEB_IP>(如 188.68.250.201) |
根域名指向 serv00 的 Web IP |
www |
CNAME | yourname.serv00.net. |
www 子域名指向 serv00 站点(注意末尾的点) |
子域名(如
blog.example.com)同理:加一条A记录指向<WEB_IP>,或用CNAME指向yourname.serv00.net.(带末尾点)。
Cloudflare 用户注意:签发 Let’s Encrypt 证书时,serv00 走的是 HTTP-01 验证(需要 80 端口可达)。如果你在 Cloudflare 开了橙色云朵(代理),验证可能失败。建议先把云朵切成灰色(DNS only)签完证书,再视情况开回代理;若坚持用代理,请在 Cloudflare 的 SSL/TLS 模式选
Full,避免证书环路。
配置完用以下命令确认解析已生效(指向 serv00 IP 即可):
1 | |
DNS 生效有缓存延迟,通常几分钟到几十分钟。务必等解析确实指向 serv00 IP 后再做下一步,否则证书签不下来。
四、第三步:在 serv00 上建站并绑定域名
SSH 登录 serv00,用 devil www 把域名加为一个站点(静态站用 php 类型):
1 | |
成功后,该域名的网站根目录为:
1 | |
如果还想让 www.example.com 也能访问,用指针指过去即可:
1 | |
此时直接访问 http://example.com 应该已经能看到内容(若 public_html 为空会是默认页,部署后即正常)。
五、第四步:签发 Let’s Encrypt 免费证书
重要区分:
*.serv00.net子域名根本不用签证书。 serv00 平台为所有*.serv00.net子域名预置了一张 Let’s Encrypt 通配符证书(CN=*.serv00.net),由平台自动签发和续期,用户完全零维护。只有绑定自有域名时,才需要像本节这样手动签一次——因为通配符证书不覆盖你的自有域名。
确认域名已解析到 serv00 后,用 devil ssl 申请证书。语法是 devil ssl www add <IP> le le <域名>,IP 用第二步查到的 Web IP:
1 | |
- 第一个
le表示证书文件用 Let’s Encrypt 自动签发; - 第二个
le表示私钥同样自动生成; - 多个域名(如根域名 + www)可一并写在后面。
签发成功后查看:
1 | |
能看到 example.com 对应的证书条目即表示签发成功。此时 https://example.com 应该可以打开了。
可以用 openssl 实测证书的颁发者、绑定域名和有效期,比看浏览器锁图标更直观:
1 | |
如果签发报错,90% 是 DNS 没生效或指错 IP。回到第二、三步核对
dig +short example.com的结果是否等于第二步查到的 Web IP(注意不是 SSH 主机 IP)。
六、第五步:强制全站走 HTTPS
证书装好后,还要强制把 HTTP 跳转到 HTTPS,避免用户走明文:
1 | |
顺手可以再开两个对静态站友好的选项:
1 | |
七、第六步:让 Hexo 输出新域名并重新部署
域名变了,Hexo 里的 url 也要同步改,否则永久链接、RSS、sitemap 里仍是旧地址。
编辑本地 _config.yml:
1 | |
然后把构建产物发布到新域名的 public_html。这里有两种做法:
做法 A:更新部署钩子的发布目录(推荐)
修改服务器上 ~/hexo.git/hooks/post-receive 里的 WEBROOT:
1 | |
这样新域名成为唯一站点,源码改完照常推送即可:
1 | |
钩子会自动 hexo generate 并发布到新域名目录,几秒后 https://example.com 即更新。
做法 B:保留 serv00.net 为构建目标,新域名做指针
如果你想两个域名都能访问、又不想改钩子,可把新域名设为 serv00.net 的指针:
1 | |
指针站会共享原站点内容。不过此时证书要绑在 serv00.net 那侧,配置略绕,个人博客更建议用做法 A,单一域名、链路清晰。
八、SSL 证书的续期与维护
Let’s Encrypt 证书有效期 90 天。好消息是:
serv00 / MyDevil 会自动续期 Let’s Encrypt 证书,到期前自动更新,无需手动操作。
按证书来源分两种情况:
| 域名类型 | 证书来源 | 续期维护 |
|---|---|---|
用户名.serv00.net 子域名 |
平台通配符证书 *.serv00.net |
完全自动,零操作(devil ssl www list 里甚至看不到,因为不属于你的账号证书) |
自有域名(le 自动签) |
你账号下的 Let’s Encrypt 证书 | serv00 自动续期,偶尔检查即可 |
| 自有域名(上传第三方证书) | 你手动上传 | 需自己手动续,到期前重新上传 |
你只需偶尔对自有域名做点检查与维护:
1 | |
几条维护建议:
- 保持 DNS 始终指向 serv00:自动续期同样走 HTTP-01 验证,若哪天你把解析改走别处,续期会失败。
- 换 IP 要重签:serv00 偶尔会调整账号 IP(用
devil vhost list复查)。若 IP 变了,需用新 IP 重新devil ssl www add并更新 DNS。 - 自有上传的证书需手动续:只有
le自动证书才会自动续期;若你上传的是第三方付费证书,到期前要自己devil ssl www add IP 证书 私钥重新上传。 - 续期失败的征兆:浏览器报证书过期,或
devil ssl www list显示已过期。此时手动重签一次即可:1
2devil ssl www del <WEB_IP> example.com
devil ssl www add <WEB_IP> le le example.com
九、常见问题速查
| 现象 | 排查 |
|---|---|
| 证书签不下来 | DNS 未生效 / 指错 IP(用了 SSH 主机 IP 而非 Web IP),用 dig +short example.com 对比第二步查到的 Web IP |
| Cloudflare 下签发失败 | 暂时关闭橙色云朵(DNS only)再签,或把 SSL 模式设 Full |
| HTTPS 能开但 HTTP 不跳转 | 没开 devil www options example.com sslonly on |
| 网页打开但永久链接是旧域名 | Hexo _config.yml 的 url 没改或没重新部署 |
| www 打不开 | 没加 devil www add www.example.com pointer example.com |
| 证书过期 | 检查 DNS 是否仍指向 Web IP;手动 del 后重新 add 重签 |
小结
给 serv00 的 Hexo 博客绑定自有域名 + HTTPS,核心就六步:查 Web IP(devil vhost list,注意区分 SSH 主机 IP 与 Web IP)→ 配 DNS(A 记录指向 Web IP)→ 建站(devil www add)→ 签证书(devil ssl www add <WEB_IP> le le 域名)→ 强制 HTTPS(sslonly on)→ 改 Hexo url 重新部署。
特别记住两点:*.serv00.net 子域名的证书由平台通配符全自动处理、零维护,只有自有域名才要手动签一次;签证书和配 DNS 一定要用 Web IP(站点真正解析到的那个),而不是 SSH 登录用的主机 IP。
证书续期 serv00 会自动处理,你只需保证域名始终解析到 Web IP、IP 变动时及时重签。配合前文的裸仓库部署钩子,从此就是「本地写作 → git push → 自有域名 HTTPS 站点自动更新」的顺畅闭环。