部署与应用
域名解析与 HTTPS 证书配置全流程
建站的两块地基:域名指向你的服务器,以及让浏览器不再报「不安全」。这篇走完从解析到证书自动续期的完整链路。证书申请失败的原因高度集中,本文也把最常见的几种单独拆出来。
开始之前
- 已有一个域名,且能修改它的 DNS 记录
- 机器已开机,能 SSH 登录,知道公网 IP
- 机器上还没有占用 80 端口的服务(或知道怎么停掉)
操作步骤
-
第 1 步: 先确认你要暴露的是哪个域名
决定用根域名(
example.com)还是子域名(www.example.com或blog.example.com)。建议两个都加,然后在 Web 服务器里把其中一个 301 到另一个。只配一个的话,另一个打不开会让访客以为站点挂了。
证书申请时要把所有要用的域名一次性写上,后期补加虽然可行,但不如一次做对省事。
-
第 2 步: 添加 DNS 解析记录
在你的域名服务商(或 Cloudflare 这类 DNS 托管商)后台添加一条 A 记录:
- 主机记录:
@(根域名)或www(子域名) - 记录类型:
A - 记录值:你的服务器公网 IP
- TTL:默认即可(通常 300 秒或自动)
用 Cloudflare 的话有一个关键点:申请证书期间,这条记录的小云朵图标要先设成灰色(DNS only)。橙色(Proxied)会让流量先经过 Cloudflare,导致证书校验拿不到你的源站,申请会失败。证书装好之后再决定是否打开代理。
- 主机记录:
-
第 3 步: 验证解析是否生效
解析不是即时的,取决于 TTL 和缓存。等待一两分钟后验证:
# Linux / macOS dig +short 你的域名 # Windows nslookup 你的域名返回的 IP 和你的服务器一致,才能进行下一步。
如果返回的是 CDN 或其他 IP,说明记录还是代理状态,回去改成 DNS only。如果返回为空,说明记录还没生效,再等一会儿。
不要跳过这一步。证书申请失败最常见的原因就是域名根本没解析到这台机器。
-
第 4 步: 装 Web 服务器并确认能访问
以 Nginx 为例(Debian / Ubuntu):
apt update apt install nginx -y systemctl enable --now nginx然后在浏览器里用
http://你的域名访问,看到 Nginx 默认页说明解析和 Web 服务器都通了。先用 HTTP 走通再上证书,可以避免「HTTP 和 HTTPS 都不通」时无从下手。
如果防火墙开着,记得放行:
ufw allow 80/tcp ufw allow 443/tcp -
第 5 步: 申请证书
用 certbot,它会自动改 Nginx 配置并加上跳转:
apt install certbot python3-certbot-nginx -y certbot --nginx -d example.com -d www.example.com把域名换成你自己的。执行过程中会问几件事:
- 输入邮箱(用于到期提醒)
- 同意服务条款
- 是否把所有 HTTP 请求跳转到 HTTPS —— 一般选是
完成后 certbot 会直接改好 Nginx 配置并 reload,不需要手动编辑。
-
第 6 步: 确认自动续期已就位
Let's Encrypt 的证书有效期是 90 天,靠自动续期维持。certbot 安装时会注册一个 systemd timer,检查它是否在:
systemctl list-timers | grep certbot再用空跑模式验证续期流程本身没问题:
certbot renew --dry-run--dry-run不会真的换证书,只走一遍流程。这一步值得做 —— 自动续期失败通常要到证书过期那天才会发现,那时站点已经打不开了。 -
第 7 步: 最后验证一遍
浏览器访问
https://你的域名,确认:- 地址栏有锁形图标,没有安全警告
- 用
http://访问会自动跳到https:// - 用
www和不用www两个都能打开
如果用了 Cloudflare 代理,现在可以把小云朵改回橙色。注意改回之后,访客看到的是 Cloudflare 的证书,你的源站证书依然需要保持有效,两者是独立的两层。
常见问题与排查
| 现象 | 原因 | 处理方式 |
|---|---|---|
| certbot 报域名验证失败 | 域名没有解析到这台机器,或者解析还被 CDN 代理着 | 用 dig 确认解析结果就是服务器 IP;Cloudflare 用户先把记录改成 DNS only(灰色云朵)再申请 |
| certbot 报 80 端口不可达 | 防火墙没放行 80 端口,或有其他服务占用了它 | 检查 ufw 规则;用 ss -tlnp | grep :80 确认端口占用情况。HTTP-01 验证必须能从公网访问 80 端口 |
| 证书装好了,但浏览器仍提示不安全 | 页面里混用了 http:// 的资源(图片、脚本、样式) | 打开浏览器控制台看被拦截的请求,把页面里的 http:// 资源地址改成 https:// 或相对路径 |
| 到期前站点突然打不开,提示证书过期 | 自动续期没有生效 | 检查 systemctl list-timers 里有没有 certbot 任务;手动执行 certbot renew 看报错。续期同样需要 80 端口可用 |
接下来可能要看
本站含联盟链接。你通过这些链接购买,价格不变,我们会获得佣金。 详情