2 分钟阅读
HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配
更新说明:新增 HTTPS 和证书部署说明。
系列:容器部署基础
- Docker 安装与使用教程:从零部署第一个容器服务
- Dockerfile 入门:构建自己的应用镜像
- Docker Compose 使用指南:管理多容器服务
- Docker 数据卷与备份:数据库容器怎么保护数据
- Docker 网络与端口映射:容器之间怎么通信
- Docker 日志和排障:logs、exec、inspect、stats
- 用 Docker 部署一个 Python Web 项目
- Nginx 反向代理入门:静态文件、HTTPS 和 Web 服务转发
- HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配
- Docker 生产环境部署注意事项:镜像、日志、数据卷和健康检查
HTTPS 部署容易让人混乱,主要是因为链路上可能有两段连接:浏览器到 Cloudflare,Cloudflare 到你的服务器。每一段是否加密,要分开看。
先理清链路
如果没有 CDN:
browser -> nginxNginx 需要配置证书。
如果用了 Cloudflare:
browser -> cloudflare -> nginx浏览器到 Cloudflare 一定可以走 HTTPS。Cloudflare 到源站是否 HTTPS,取决于 SSL 模式和源站配置。
Let’s Encrypt 适合源站证书
在服务器上可以用 certbot 申请证书:
certbot --nginx -d app.internal续期一般由 systemd timer 处理:
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 端口是否能访问。
curl -I http://app.internalHTTPS 能打开但后端跳回 HTTP,检查 Nginx 转发头和应用的代理配置。
浏览器提示证书不可信,检查是否用了自签证书,或者 Cloudflare SSL 模式不是 Full strict。
总结
HTTPS 配好后,可以继续看 Nginx 反向代理入门:静态文件、HTTPS 和 Web 服务转发,把转发、静态文件和日志整理到一套配置里。证书问题不要只看浏览器提示,还要分清浏览器到 CDN、CDN 到源站这两段连接。