网站突然打不开,我排查到最后才发现是证书过期
摘要:记录一次个人服务器故障排查,从 DNS、反向代理到 SSL 证书续签,以及顺手发现的端口安全问题。
标签:服务器、Nginx、SSL、运维
今天打开自己的博客和备忘录网站,浏览器突然全部报错。第一反应是域名解析出了问题,于是登录阿里云检查 DNS。根域名、www、blog 和 memo 的 A 记录都正确指向服务器公网 IP,看起来没有异常。
问题不在 DNS
继续测试后发现,服务器的 80 和 443 端口都能连接,博客和备忘录的程序也还在正常运行。真正的问题出在 SSL 证书:两个网站的 Let’s Encrypt 证书已经过期一个多月,浏览器因此拒绝建立 HTTPS 连接。
服务器里虽然有一个“续签 Let’s Encrypt 证书”的自动任务,而且状态显示正常,但“任务执行成功”不等于“证书续签成功”。它续签的可能是另一套证书,而 Nginx Proxy Manager 仍然使用自己的旧证书。
最后的解决办法
我进入 Nginx Proxy Manager 后台,在 SSL Certificates 中手动续签证书,再把新证书绑定到对应的网站。保存配置后,博客和备忘录终于恢复正常。
排查时还发现,SSH、管理后台和网站后端端口都直接向全网开放。虽然开放端口不代表一定会被入侵,但公网服务器每天都会被自动扫描。于是我只保留 80、443 对外开放,把管理端口限制为自己的公网 IP,并关闭了网站后端端口的公网入口。
这次学到的事
服务器显示“正常”,并不代表服务真的正常。自动任务、证书状态、反向代理和安全组需要分别验证。以后除了定期检查证书,我也会尽量遵循一个原则:能不暴露到公网的端口,就不要暴露。
License:
CC BY 4.0