在当今互联网环境中,使用 HTTPS 加密通信已成为网站安全的基本要求。而 HTTPS 的核心就是 SSL/TLS 证书。一旦 SSL 证书过期,用户的浏览器会弹出严重警告,导致用户无法正常访问你的网站,严重影响用户体验和企业形象。
因此,Nginx SSL证书监控 是每个运维人员必须掌握的技能。本文将从零开始,教你如何轻松实现对 Nginx 所用 SSL 证书的有效期进行自动监控,并在证书即将过期时收到提醒。
一、为什么需要监控 SSL 证书?
SSL 证书通常有效期为 90 天(Let's Encrypt)或 1 年(商业证书)。如果忘记续期,网站将无法通过 HTTPS 访问,搜索引擎也会降低排名。通过设置 SSL证书到期提醒,你可以提前收到通知,避免服务中断。
二、准备工作
你需要:
- 一台运行 Nginx 的 Linux 服务器(如 Ubuntu/CentOS)
- 已配置 HTTPS 的网站(即 Nginx 已加载 SSL 证书)
- 基本的命令行操作能力
三、查看当前 SSL 证书有效期
首先,我们需要知道证书文件的位置。通常在 Nginx 配置中指定,例如:
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key;} 使用以下命令查看证书的过期时间:
openssl x509 -enddate -noout -in /etc/nginx/ssl/example.com.crt
输出类似:
notAfter=Aug 15 12:00:00 2024 GMT
四、编写监控脚本
下面是一个简单的 Bash 脚本,用于检查证书是否在 30 天内过期:
#!/bin/bashCERT_FILE="/etc/nginx/ssl/example.com.crt"DOMAIN="example.com"WARNING_DAYS=30# 获取证书过期时间(秒时间戳)END_DATE=$(openssl x509 -enddate -noout -in "$CERT_FILE" | cut -d= -f2)END_SEC=$(date -d "$END_DATE" +%s)NOW_SEC=$(date +%s)DAYS_LEFT=$(( (END_SEC - NOW_SEC) / 86400 ))if [ $DAYS_LEFT -le $WARNING_DAYS ]; then echo "[警告] 域名 $DOMAIN 的 SSL 证书将在 $DAYS_LEFT 天后过期!" # 可在此处添加邮件通知命令,例如: # echo "证书即将过期,请及时续期!" | mail -s "SSL证书警告" admin@example.comelse echo "[正常] 域名 $DOMAIN 的 SSL 证书还有 $DAYS_LEFT 天有效期。"fi
将上述脚本保存为 check_ssl.sh,并赋予执行权限:
chmod +x check_ssl.sh
五、设置定时任务(Cron)
为了让监控自动化,我们可以使用 cron 每天执行一次检查:
crontab -e
添加以下行(每天早上 8 点检查):
0 8 * * * /path/to/check_ssl.sh >> /var/log/ssl_monitor.log 2>&1
六、进阶建议
对于管理多个域名的场景,可以:
- 遍历 Nginx 配置文件自动提取所有证书路径
- 集成到 Prometheus + Alertmanager 实现可视化告警
- 使用第三方工具如
certbot renew --dry-run验证自动续期是否正常
无论采用哪种方式,Nginx HTTPS配置 的安全性都离不开对证书生命周期的主动管理。定期检查、自动提醒是保障业务连续性的关键。
七、总结
通过本文,你已经学会了如何手动和自动监控 Nginx 的 SSL 证书有效期。这不仅是 网站安全运维 的基础工作,更是提升系统可靠性的必要措施。建议立即为你的服务器部署此监控机制,避免因证书过期造成不必要的损失。
记住:安全无小事,预防胜于补救!
