HTTPS 与证书
listen ssl、证书链、HTTP 跳转 HTTPS。
HTTPS 与证书
这一课你将能做到
- 在
server中配置listen 443 ssl、ssl_certificate/ssl_certificate_key,并解释为何常用 fullchain - 写出 HTTP→HTTPS 与裸域→www 的 301,与
prod.conf.example对齐 - 口述 certbot 申请/续期后需要
nginx -t与 reload 的原因,并说明 后端是否还要 HTTPS
为什么要学
公网站点没有 TLS,浏览器警告、Cookie Secure、HSTS 都无从谈起。生产惯例是:在 Nginx 终止 TLS,再以 HTTP 访问本机 Spring / Next。
证书链不全、只开 443 忘了 80 跳转、裸域与 www 分裂,都会造成「我证书装了但用户仍进不去/不安全」。
本课把证书文件、跳转、与内网明文上游的边界讲清;安全头(HSTS)在下一课加强。
先建立图像
浏览器 ──TLS──► Nginx:443 ──http──► 127.0.0.1:3000 / :8080
│
├─ fullchain.pem(站点证 + 中间证)
└─ privkey.pem (私钥,权限要严)
80 端口:只负责 301 到 https://www…
人话:HTTPS 是「门岗与访客之间的加密对讲」;门岗进内院后,对知根知底的室友可以用普通对讲(本机 HTTP)。
| 文件 | 作用 |
|---|---|
fullchain.pem | 叶子证书 + 中间 CA,客户端靠它建链 |
privkey.pem | 私钥,绝不能进 git / 世界可读 |
cert.pem(仅叶子) | 缺中间链时部分客户端握手失败 |
跟着做
步骤 1:读官方 SSL 示例方向
浏览 Configuring HTTPS servers,记下最小要素:listen … ssl、证书、私钥。
用中文写:「TLS 在 server 层配置,不是 location 装饰。」
步骤 2:对照 443 主站骨架
server {
listen 443 ssl http2;
server_name www.coderoadmap.cn;
# Let's Encrypt 常见路径(生产取消注释并确保证书存在)
ssl_certificate /etc/letsencrypt/live/www.coderoadmap.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.coderoadmap.cn/privkey.pem;
# 现代浏览器:TLS1.2+;具体套件随版本演进
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
# location /api/ … location / … 见前几课
}
prod.conf.example 中证书行默认注释,避免无证书时 -t/启动失败;上线前打开并指向真实文件。
步骤 3:强制 HTTPS + 统一 www
# 所有 HTTP 进 www HTTPS
server {
listen 80;
server_name www.coderoadmap.cn coderoadmap.cn;
return 301 https://www.coderoadmap.cn$request_uri;
}
# 裸域 HTTPS 也归并到 www
server {
listen 443 ssl http2;
server_name coderoadmap.cn;
ssl_certificate /etc/letsencrypt/live/www.coderoadmap.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.coderoadmap.cn/privkey.pem;
return 301 https://www.coderoadmap.cn$request_uri;
}