Nginx 博客配置 Let's Encrypt SSL 证书及 DNS 踩坑记录
Nginx 博客配置 Let’s Encrypt SSL 证书及 DNS 踩坑记录
前两天刚把服务器的 80 端口理顺,用 Nginx 做了反向代理,实现了“域名访问博客,IP 访问 OJ”的分流。但是发现我的网站只能用浏览器的无痕模式访问,查了一下大概是普通模式会自动使用https,但是由于没有配置SSL证书,所以无法访问。
去国内某云厂商的控制台看了一眼,好家伙,最基础的单域名 DV 证书现在居然卖到了 500 多块钱一年。果断关闭页面,拥抱开源世界最良心的方案:Let’s Encrypt 免费证书 + Certbot 自动化工具。
这里记录一下整个配置过程,以及中间遇到的一个非常经典的“网络灵异”大坑。
1. 极简安装与申请
因为我的服务器是 Ubuntu 系统,Web 服务器是 Nginx,所以直接用 apt 一键安装 Certbot 和它的 Nginx 插件:
sudo apt update |
安装完之后,理论上只需要执行下面这一行命令,Certbot 就会自动帮我验证域名、申请证书、甚至连 Nginx 的配置文件都帮我改好:
sudo certbot --nginx -d duziks.top |
本来以为敲下回车就能顺利喝茶了,结果现实狠狠打脸。
2. 踩坑:全世界都不认识我的域名?
终端直接甩给我一段无情的报错: Detail: no valid A records found for duziks.top
大意是发证机构找不到我域名的 A 记录,验证失败。这就见鬼了,我明明在域名控制台配好了指向我服务器 IP 的解析,并且在自己本地的 Windows 电脑上 ping duziks.top,也能准确返回 111.228.45.41。
为什么我本地能 Ping 通,Certbot 却说找不到?
排查了一圈,破案了。原因出在 “全球 DNS 同步时间差(DNS Propagation)” 上。
Let’s Encrypt 的发证服务器主要在国外。我刚刚修改了域名解析,国内的宽带运营商同步速度非常快,立刻就认识了这个新 IP。但是跨越国际网络后,国外的 DNS 节点还没有收到这份“更新通知”,在它们眼里,我的域名依然是个空号。
3. 验证与解决
为了印证这个猜想,我打开了全球 DNS 检测工具 dnschecker.org,输入域名一查——果然,除了国内的几个节点,欧美地区的节点全部飘红 ❌。
既然路还没修通,疯狂重试也没用(甚至可能会触发 Let’s Encrypt 的防刷机制被关小黑屋)。
唯一的解决方案就是:等。
去喝了杯水,刷了会儿视频。大概等了半个多小时,再次去 dnschecker 上刷新,看到美国的几个关键节点终于变成了绿色的 ✅。
回到终端,再次执行:
sudo certbot --nginx -d duziks.top |
这一次畅通无阻!同意了协议,终端立刻弹出了绿色的 Congratulations! You have successfully enabled HTTPS。
4. 意外之喜:一劳永逸的续签
之前一直嫌弃免费证书只有 90 天有效期,每隔三个月就要手动弄一次很麻烦。
这次用 Certbot 发现,它在安装证书的同时,已经默默在 Ubuntu 系统的后台加了一个定时任务(可以通过 systemctl list-timers | grep certbot 查看)。以后每次快过期时,它会在后台自动帮我续签,完全不需要人工干预。
总结
- 别买基础版付费证书:个人网站用 Let’s Encrypt 完全足够,底层加密算法和几百块钱的商业 DV 证书一模一样。
- 警惕 DNS 缓存延迟:刚改完域名解析,如果申请证书报错,别急着改服务器配置。先用检测工具看看国外节点生效了没,让子弹飞一会儿。








