SSL证书过期后浏览器会强制拦截连接,Nginx无法绕过该验证;必须更新有效证书并重载配置,推荐使用Certbot自动续期+定时任务,手动更换后需执行nginx -t和nginx -s reload。
SSL证书过期后,浏览器会直接拦截连接,用户看到“您的连接不是私密连接”等警告,网站实际已无法安全访问。Nginx本身不能绕过或忽略证书过期验证——这是客户端(浏览器/系统)强制执行的安全机制。真正可行的解决路径是:快速更新有效证书,并配合Nginx正确加载,而非“用Nginx解决过期问题”。
立即检查并确认证书状态
登录服务器,用以下命令快速验证当前证书是否真的过期:
查看证书有效期
:
检查Nginx配置中引用的证书路径
:
确认文件存在且权限正确
(Nginx需有读取权限,通常为
且权限
)
优先使用自动续期方案(推荐 Let's Encrypt + Certbot)
人工更新易遗漏,Certbot 可与 Nginx 深度集成,实现零停机续期:
运行
,Certbot 会自动检测域名、申请新证书、更新 Nginx 配置并重载服务
确保已配置定时任务(如 cron)定期执行续期:
首次部署时用
,Certbot 会自动修改 Nginx 配置,添加
等指令
手动更换证书后务必重载 Nginx
即使证书文件已替换,Nginx 仍缓存旧证书在内存中,必须显式重载配置:
先测试配置语法:
,避免因路径错误或格式问题导致重载失败
成功后再执行:
(不是
,更轻量且不中断已有连接)
验证是否生效:
或访问
SSL Labs 测试页
查看新证书信息
临时应急:避免用户长时间卡在错误页
若证书已过期且暂时无法立即更新,可短期降低影响,但
不能替代证书更新
:
在 Nginx 中配置 HTTP → HTTPS 强制跳转前,先保留一个 HTTP 入口(如
),方便监控探测存活
对内部管理接口或 API,可考虑临时启用
(仅限调试,不解决浏览器报错)
切勿尝试用自签名证书覆盖——用户仍会遇到严重警告,且信任链断裂
核心原则很明确:证书过期是运维事件,不是Nginx配置问题。关键是建立自动化续期流程,并通过定期检查和监控提前预警,把“突发无法访问”变成“计划内平滑更新”。
openssl x509 -in /path/to/fullchain.pem -noout -datesgrep -E "(ssl_certificate|ssl_certificate_key)" /etc/nginx/sites-enabled/*root:root644sudo certbot renew --nginx0 12 * * 1 /usr/bin/certbot renew --quiet --post-hook "/usr/sbin/nginx -s reload"certbot --nginx -d example.comssl_certificatesudo nginx -tsudo nginx -s reloadrestartcurl -I https://yoursite.comlocation /health { return 200 "OK"; }ssl_verify_client off