给 Nginx 反向代理加 HTTPS:Certbot 一次配好、自动续期

举报
yd_246130537 发表于 2026/10/25 09:44:40 2026/10/25
【摘要】 很多自建服务一开始只跑在 HTTP 上:浏览器地址栏标“不安全”,调用微信、支付宝这类要求 HTTPS 的回调也接不进来。其实只要域名已经解析到服务器,用 Certbot 申请免费证书,十分钟就能把反向代理升级成 HTTPS,而且续期可以全自动,不用每三个月手动折腾一次。先确认两件事。第一,域名 A 记录已经指向服务器公网 IP,用 ping 你的域名 能看到服务器 IP 才算通;第二,80...

很多自建服务一开始只跑在 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 就算真正落地了,后面只需要偶尔看一眼邮箱里的到期提醒,其余交给自动续期。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。