文章列表
2 分钟阅读

HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配

更新说明:新增 HTTPS 和证书部署说明。


系列:容器部署基础

第 9 / 10 篇

  1. Docker 安装与使用教程:从零部署第一个容器服务
  2. Dockerfile 入门:构建自己的应用镜像
  3. Docker Compose 使用指南:管理多容器服务
  4. Docker 数据卷与备份:数据库容器怎么保护数据
  5. Docker 网络与端口映射:容器之间怎么通信
  6. Docker 日志和排障:logs、exec、inspect、stats
  7. 用 Docker 部署一个 Python Web 项目
  8. Nginx 反向代理入门:静态文件、HTTPS 和 Web 服务转发
  9. HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配
  10. Docker 生产环境部署注意事项:镜像、日志、数据卷和健康检查

HTTPS 部署容易让人混乱,主要是因为链路上可能有两段连接:浏览器到 Cloudflare,Cloudflare 到你的服务器。每一段是否加密,要分开看。

先理清链路

如果没有 CDN:

browser -> nginx

Nginx 需要配置证书。

如果用了 Cloudflare:

browser -> cloudflare -> nginx

浏览器到 Cloudflare 一定可以走 HTTPS。Cloudflare 到源站是否 HTTPS,取决于 SSL 模式和源站配置。

Let’s Encrypt 适合源站证书

在服务器上可以用 certbot 申请证书:

Terminal window
certbot --nginx -d app.internal

续期一般由 systemd timer 处理:

Terminal window
systemctl list-timers | grep certbot

如果不用 certbot 自动改 Nginx,也可以手动配置:

server {
listen 443 ssl;
server_name app.internal;
ssl_certificate /etc/letsencrypt/live/app.internal/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.internal/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
}
}

Cloudflare 模式怎么选

我通常只考虑两种:

  • Full strict:Cloudflare 到源站也校验证书,推荐
  • Full:源站有证书但不严格校验,只适合临时过渡

不要长期使用 Flexible。它只保证浏览器到 Cloudflare 是 HTTPS,Cloudflare 到源站仍然是 HTTP,容易出现回调地址、重定向和安全判断混乱。

Nginx 里补上转发头

反向代理时要把协议告诉后端:

proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;

否则应用可能以为自己运行在 HTTP 后面,生成错误的跳转链接。

常见问题

证书申请失败,先检查域名是否解析到当前服务器,80 端口是否能访问。

Terminal window
curl -I http://app.internal

HTTPS 能打开但后端跳回 HTTP,检查 Nginx 转发头和应用的代理配置。

浏览器提示证书不可信,检查是否用了自签证书,或者 Cloudflare SSL 模式不是 Full strict。

总结

HTTPS 配好后,可以继续看 Nginx 反向代理入门:静态文件、HTTPS 和 Web 服务转发,把转发、静态文件和日志整理到一套配置里。证书问题不要只看浏览器提示,还要分清浏览器到 CDN、CDN 到源站这两段连接。