证书是什么
HTTPS = TLS:握手时用非对称加密协商出对称密钥,之后的传输全部用对称加密(快)。证书是"身份的公证":CA 用自己的私钥给你的公钥签名,浏览器验证签名链——你的证书 → 中间证书 → 根证书(浏览器内置信任)。配证书最常见的翻车就是漏了中间证书:自己浏览器好使(有缓存),用户浏览器报"证书不受信任"。上线前用 SSL Labs 扫一遍,链不全会直接标出来。
标准配置:可直接抄
server {
listen 443 ssl;
http2 on; # HTTP/2(新版写法)
server_name example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem; # 必须是全链!
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3; # 1.0/1.1 早已淘汰
ssl_session_cache shared:SSL:10m; # 会话复用,省握手
ssl_session_timeout 1d;
add_header Strict-Transport-Security "max-age=31536000" always;
# HSTS:告诉浏览器一年内只用 https 访问我,防降级劫持
}免费证书用 Letu0027s Encrypt:certbot 申请并自动改 Nginx 配置,certbot renew 挂进 systemd timer,90 天续期全自动——证书过期导致全站瘫痪的事故,多数是"手动续期忘了"。
强制跳转与环路
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # 80 全部 301 到 443
}
#
# 经典环路:Nginx 终结了 TLS,后端看到的是 http 请求
# 后端框架发现"http"不是 https,又发起 301 跳 https —— 死循环
# 解法:Nginx 传 X-Forwarded-Proto $scheme(反向代理篇配过)
# 后端以这个头判断原始协议,而不是直接看请求 scheme"HTTPS 之后页面突然重定向过多"十有八九是这个环路——TLS 在哪终结,协议信息就要在哪传出。
HTTP/2 的收益
HTTP/1.1 的痛点是队头阻塞:一个连接同一时刻只能跑一个请求,浏览器只能开 6 个连接并发。HTTP/2 在一条连接上多路复用:几十个请求交错传输互不阻塞,配合头部压缩,资源多的页面首屏提升明显。开启只需一个词,兼容性零成本(浏览器不支持就自动回退 1.1)。验证:DevTools 的 Protocol 列显示 h2 就是生效了。
细节加分项
会话复用(session cache/tickets)让回访用户跳过完整握手;OCSP stapling 让证书状态校验由 Nginx 代劳(省一次浏览器到 CA 的往返);TLS 1.3 的 1-RTT 握手把新建连接的开销又砍一半。这些默认值已不错,知道有这回事即可。安全与体验齐了,下一篇玩转 rewrite——重定向背后的四个 flag。
评论 (0)