Nginx 反向代理 + Certbot:给个人网站配好 HTTPS 的完整实操

举报
yd_297054306 发表于 2026/11/09 08:57:31 2026/11/09
【摘要】 用 Nginx 反向代理 + Certbot 免费证书给个人网站配好 HTTPS:从安装 Nginx、写 proxy_pass 配置,到申请 Let's Encrypt 证书、验证自动续期,再到 TLS 加固与常见 502、证书失败问题的排查,全流程实操。

为什么需要反向代理 + HTTPS

个人网站常跑在内网端口上,例如博客跑在 3000 端口、相册跑在 8080 端口。直接把这些端口暴露到公网既不安全也不好看。正确的做法是:只开放 80 和 443 端口,由 Nginx 做反向代理,把不同域名或路径分发到本机的各个服务;再用 Certbot 向 Let’s Encrypt 申请免费证书,让全站走 HTTPS。

这样做有三个好处:第一,浏览器不再报“不安全”,用户敢放心访问;第二,真实服务端口不暴露在公网,攻击面大幅缩小;第三,以后新增服务只需加一段 Nginx 配置,不用再开新端口。

第一步:安装 Nginx

以 Ubuntu 22.04 为例:

sudo apt update && sudo apt install -y nginx
sudo systemctl enable --now nginx
curl -I http://localhost

curl 能返回 HTTP/1.1 200 OK,说明 Nginx 已正常工作。确认云服务器安全组已放行 80 和 443 端口,否则外网无法访问。

第二步:写一个反向代理配置

假设博客跑在本地 3000 端口,域名是 blog.example.com。新建配置文件 /etc/nginx/conf.d/blog.conf:

server {
    listen 80;
    server_name blog.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

几个关键点:proxy_pass 指向本地服务;Host 头要原样透传,否则依赖域名的应用会认错地址;X-Forwarded-Proto 告诉后端当前是 HTTP 还是 HTTPS,避免后端生成错误的跳转链接。

检查并重载配置:

sudo nginx -t && sudo systemctl reload nginx

nginx -t 先测试语法再重载,是个好习惯——配置写错也不会让正在运行的 Nginx 停掉。

第三步:用 Certbot 申请免费证书

Let’s Encrypt 的证书免费、有效期 90 天,Certbot 可以自动申请和续期:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d blog.example.com

Certbot 会先验证你对这个域名的控制权(它会在 Nginx 里临时加一段验证配置),通过后自动签发证书,并把 443 端口的 ssl_certificate 配置写进 Nginx,最后还会加一条 80 到 443 的强制跳转。按提示填一个邮箱即可,证书到期前 Certbot 会发提醒。

验证续期是否正常工作:

sudo certbot renew --dry-run

输出没有报错,就说明自动续期链路是通的。Certbot 装好后默认已装好定时任务,每天会尝试续期,无需人工干预。

第四步:加固几个常用项

证书配好后,建议再做三处加固:

  • 只保留强加密套件:在 ssl.conf 里确认 ssl_protocols TLSv1.2 TLSv1.3;,关闭老旧的 TLS 1.0/1.1。
  • 开启 HSTS:add_header Strict-Transport-Security "max-age=63072000" always;,让浏览器记住以后只用 HTTPS 访问。
  • 限制请求频率:对登录接口用 limit_req_zone 限流,防止暴力破解把后端打满。

常见问题排查

  • 访问域名报 502:先看后端服务本身是否在跑,curl http://127.0.0.1:3000 本地能通再查 Nginx;再看 sudo tail -f /var/log/nginx/error.log 的报错。
  • 证书申请失败:多半是域名没有解析到这台服务器,或 80 端口被安全组挡住了。先确认 ping 域名得到的 IP 与服务器公网 IP 一致。
  • 混合内容警告:页面里引用了 http:// 的图片或脚本,浏览器会拦截。把站内资源全部改成相对路径或 https:// 即可。

小结

Nginx 反向代理 + Certbot 这套组合拳,是个人网站上 HTTPS 性价比最高的方案:零证书费用、配置不到十行、续期全自动。核心流程就四步:装 Nginx、写 proxy_pass、跑 certbot --nginx、做一次 dry-run 验证续期。把这套流程跑通一次,之后每新增一个服务,复制一段配置、申请一张证书,十分钟就能上线。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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