给 Nginx 反向代理加 HTTPS:Certbot 一次配好、自动续期
很多自建服务一开始只跑在 HTTP 上:浏览器地址栏标“不安全”,调用微信、支付宝这类要求 HTTPS 的回调也接不进来。其实只要域名已经解析到服务器,用 Certbot 申请免费证书,十分钟就能把反向代理升级成 HTTPS,而且续期可以全自动,不用每三个月手动折腾一次。
先确认两件事。第一,域名 A 记录已经指向服务器公网 IP,用 ping 你的域名 能看到服务器 IP 才算通;第二,80 端口没有被防火墙挡住,因为证书颁发机构要通过 80 端口访问一个临时验证文件来确认域名是你的。如果服务器开了 UFW,先放行:sudo ufw allow 80,443/tcp。
以 Ubuntu + Nginx 为例。先装 Certbot 的 Nginx 插件:sudo apt update && sudo apt install certbot python3-certbot-nginx。假设你的反向代理配置已经写好,例如把 app.example.com 代理到本机 3000 端口,那么直接跑一条命令:sudo certbot --nginx -d app.example.com。Certbot 会先问邮箱(用于证书到期提醒,填一个常用邮箱即可),再问是否把 HTTP 重定向到 HTTPS,选重定向。完成后它会自动改写 Nginx 配置,加上证书路径和 443 监听,执行 sudo nginx -t && sudo systemctl reload nginx 就生效了。这时用浏览器打开 https://app.example.com,小锁头应该已经出现。
证书有效期只有 90 天,但不需要记在日历上。Certbot 安装时一般已经装好定时任务,每天自动检查、快到期自动续期。可以用 sudo certbot renew --dry-run 做一次模拟续期,看到“Congratulations”就说明自动续期链路是通的;如果模拟失败,先检查 80 端口和域名解析,而不是等到证书过期那天才发现。
有几个常见坑值得提前避开。一是反向代理后面如果还有一层 CDN,要确认 CDN 回源用的是 HTTPS,否则会出现“浏览器到 CDN 是 HTTPS、CDN 到源站是 HTTP”的半截加密。二是证书续期后 Nginx 需要重载配置,Certbot 默认会处理,但如果你是手动改配置加的证书,就要自己在续期钩子里加 systemctl reload nginx。三是不要把证书私钥发到群里或提交到代码仓库,私钥只留在服务器 /etc/letsencrypt/ 目录下,权限默认已经收得很紧。
最后做一次自查清单:浏览器小锁正常、HTTP 自动跳 HTTPS、/etc/letsencrypt/renewal/ 里有对应域名的续期配置、certbot renew --dry-run 通过。这四项都过,这套 HTTPS 就算真正落地了,后面只需要偶尔看一眼邮箱里的到期提醒,其余交给自动续期。
- 点赞
- 收藏
- 关注作者
评论(0)