Nginx + Certbot 给云服务器上的 Web 应用配好免费 HTTPS:一步步实战

举报
yd_276596855 发表于 2026/11/07 09:55:33 2026/11/07
【摘要】 在一台 Linux 云服务器上,用 Nginx 做反向代理,再用 Certbot 申请 Let's Encrypt 免费证书,给后端应用加上 HTTPS 并设置自动续期。

摘要:在一台 Linux 云服务器上,用 Nginx 做反向代理,再用 Certbot 申请 Let’s Encrypt 免费证书,给后端应用加上 HTTPS 并设置自动续期。


一、为什么要做这一步

很多人把 Flask、Node.js 或 Spring Boot 应用直接跑在云服务器的 5000、3000、8080 端口上,再在安全组里放开端口访问。这样能用,但有三个问题:没有 HTTPS,浏览器会提示“不安全”;端口暴露太多,不好管理;一台机器跑多个应用时,域名和端口对应关系很乱。

更常见的做法是:应用只监听本机端口,前面放一层 Nginx 统一对外提供 80/443,再用免费证书开启 HTTPS。

二、准备工作

  1. 一台 Linux 云服务器(本文以 Ubuntu 22.04 为例)。
  2. 一个已解析到服务器公网 IP 的域名,例如 app.example.com。
  3. 安全组放行 TCP 80 和 443 端口。
  4. 后端应用已在本机运行,例如监听 127.0.0.1:5000。

三、安装 Nginx

sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx

浏览器访问服务器 IP,看到 Nginx 欢迎页说明安装成功。

四、配置反向代理

新建配置文件 /etc/nginx/sites-available/app.conf:

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

    location / {
        proxy_pass http://127.0.0.1:5000;
        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;
    }
}

启用并检查配置:

sudo ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

此时用 http://app.example.com 已经可以访问到后端应用。

五、用 Certbot 申请免费证书

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

按提示填写邮箱、同意协议,并选择把 HTTP 自动跳转到 HTTPS。Certbot 会自动修改 Nginx 配置,加入 listen 443 ssl 和证书路径。

完成后访问 https://app.example.com,地址栏出现锁形图标即成功。

六、自动续期

Let’s Encrypt 证书有效期 90 天。Certbot 安装时会自动添加定时任务,可以用下面的命令验证续期流程:

sudo certbot renew --dry-run

没有报错就说明到期前会自动续期,不用手动操作。

七、几个常见坑

  1. 证书申请失败,提示无法验证:先确认域名解析已生效(ping 域名看 IP 是否正确),以及 80 端口在安全组和系统防火墙(ufw)里都已放行。
  2. 后端拿到的客户端 IP 全是 127.0.0.1:记得加上 X-Real-IP 和 X-Forwarded-For 头,并让应用信任代理头。
  3. WebSocket 连接失败:在 location 中补充
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
  1. 应用端口仍对公网开放:后端只监听 127.0.0.1,并在安全组中关闭 5000 等端口,只保留 22、80、443。

八、小结

Nginx 负责对外入口和证书,应用只专注业务,这是小型项目上云最省心的结构。整个过程十几分钟,零成本就能让站点用上 HTTPS。后续再加新应用,只需新增一个 server 配置和一次 certbot 命令即可。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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