HTTPS 这玩意儿吧, 没装之前你觉得它很神秘, 装完之后你会发现—— 它不神秘,它只是爱给你添戏。 🎭
本文不是官方文档复读机, 而是一篇 “真实踩坑纪实 + 人话翻译版 HTTPS 指南”。
适合人群:
- 会装 Nginx
- 会写 proxy_pass
- 但一碰 HTTPS 就开始怀疑人生的人
🧱 一、开局配置(不难,但很关键)
你的起点通常是这样:
- 系统:CentOS Stream 9 🐧
- Nginx:已装好,80 能访问
- 域名:A 记录已指向服务器
这时你心里只有一个朴素愿望:
“我就想要个小绿锁 🔒,别整幺蛾子。”
——放心,幺蛾子马上就来。
🧰 二、Certbot 登场(主角出场必有 BGM)
安装:
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-nginx
然后一行命令:
sudo certbot --nginx -d yiqiquhuxi.cn
Certbot 会非常热情地帮你做四件事:
1️⃣ 验证你是不是域名主人
2️⃣ 申请证书
3️⃣ 把证书塞进 /etc/letsencrypt/live/
4️⃣ 顺手改你的 Nginx 配置(重点)
这一步结束时,你会看到一句非常温柔的话:
🎉 Congratulations! You have successfully enabled HTTPS
你以为结束了? 不。 这是故事的 第一幕。
😵 三、Certbot:我帮你改了配置,不用谢
你打开 Nginx 配置一看:
咦? 我监听的是 8080, 你怎么把
listen 443 ssl;写进来了?
别慌,这是 Certbot 的“直男式智能”。
它的逻辑只有一句话:
谁写了 server_name,我就改谁。
不管你是 80、8080、16601, 只要里面有:
server_name yiqiquhuxi.cn;
Certbot 就会冲进去加 HTTPS。
📌 结论:
- 这不是 Bug
- 这是“自动化没有审美”
🧠 四、正确姿势:80 是路,443 是门
经验总结一句话:
HTTP 是马路,HTTPS 是安检口。 🚪
✅ 推荐结构
HTTP(80)——别动它
server {
listen 80;
server_name yiqiquhuxi.cn;
location / {
proxy_pass http://后端;
}
}
❌ 不要写:
return 301 https://...;
你不想跳,它就不该跳。
HTTPS(443)——单独一个 conf
server {
listen 443 ssl http2;
server_name yiqiquhuxi.cn;
ssl_certificate /etc/letsencrypt/live/yiqiquhuxi.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yiqiquhuxi.cn/privkey.pem;
location / {
proxy_pass http://后端;
}
}
📌 这一步,结构就赢了一半。
🚑 五、HTTPS 一上,502 立刻出现?
别慌。
502 的真实含义只有一句话:
Nginx:我敲了后端的门,但没人应。 🚪👻
常见原因:
- proxy_pass 写错
- 后端没起
- 内网地址不可达
排查神器:
curl http://后端地址
还有终极裁判:
tail -f /var/log/nginx/error.log
日志从不骗人。
🔥 六、HTTPS 页面里引用 HTTP 资源?浏览器不干
你会遇到一个经典场面:
首页是 https:// 图片却是 http:// 然后——加载失败 ❌
这不是 Nginx 抽风。
这是浏览器拍桌子:
“你都加密了,还想夹带明文?不行!” 🔐
这叫 Mixed Content(混合内容)。
真相很残酷:
❌ 你没法让 HTTPS 页面「坚持使用 HTTP 资源」
能活下来的方案只有:
- 资源也走 HTTPS(推荐)
- Nginx 反代资源
- 后端改相对路径
别和浏览器对着干, 它是甲方。
🤯 七、我没写跳转,HTTP 怎么自己变 HTTPS 了?
恭喜你, 你遇到了 HSTS。
HSTS 是什么?
一句话:
浏览器记仇。 🧠
只要你曾经告诉过它:
“这个站以后只准用 HTTPS”
它就会:
- 永久自动升级
- 不走 nginx
- 不给你反悔机会
验证方式
- 用无痕窗口
- 或清除:
chrome://net-internals/#hsts
删掉域名,再试一次。
🔁 八、证书续期:你可以忘,系统不会
Let’s Encrypt:
- 有效期 90 天
- Certbot 已自动续期
你唯一要做的:
sudo certbot renew --dry-run
看到 success, 就可以放心去摸鱼了 ☕
🏁 九、最终总结(人话版)
- Certbot 很勤快,但不懂你架构
- HTTPS 不是开关,是协议承诺
- 浏览器比 nginx 更强势
- 不要和 Mixed Content、HSTS 硬刚
HTTPS 装到最后, 拼的不是命令, 是 认知对齐。
装完证书的人很多, 真正理解它的人不多。
如果你看到这里——
🎉 恭喜,你已经是后者了。