云端Nginx SSL配置核心是适配证书动态性、容器化兼容性、自动续期集成与安全合规基线:优先用Secret挂载证书,由cert-manager等工具统一管理生命周期,按云LB是否终止TLS分层配置SSL参数,并增强健康检查与SSL可观测性。

在云端部署环境中配置 Nginx SSL,核心不是简单套用本地配置,而是围绕证书动态性、容器化兼容性、自动续期集成、安全合规基线这四点展开。云环境(如 AWS ECS、阿里云 ACK、腾讯云 TKE 或纯 Docker Swarm/K8s)通常不直接挂载宿主机证书文件,也不适合手动更新私钥——必须让配置能适配 CI/CD 流水线、密钥管理服务(如 AWS Secrets Manager、HashiCorp Vault)或自动化工具链。
证书注入方式:优先使用 Secret 挂载而非固定路径
云平台普遍提供 Secret 资源抽象,Nginx 容器应通过 Secret 挂载证书,而非硬编码路径:
- 在 Kubernetes 中,把
example.com.crt和example.com.key创建为 TLS Secret:kubectl create secret tls example-tls --cert=./certs/fullchain.pem --key=./certs/privkey.pem - 在 Deployment 的 volumeMounts 中挂载到
/etc/nginx/ssl/,并在 Nginx 配置中引用:ssl_certificate /etc/nginx/ssl/tls.crt; ssl_certificate_key /etc/nginx/ssl/tls.key; - 避免使用
./certs/这类相对路径或宿主机绝对路径;Secret 挂载后文件权限默认为 644/600,符合 Nginx 读取要求
自动续期协同:让 Certbot 或外部 ACME 客户端接管证书生命周期
云端不建议在 Nginx 容器内运行 Certbot(违反单一职责),而应由独立的 Job 或 Sidecar 完成续期,并触发 Nginx 重载:
- 使用
cert-manager(K8s 生态事实标准):定义 Certificate 资源,自动申请 Let’s Encrypt 泛域名证书,写入同一 TLS Secret,Nginx Pod 可感知挂载内容变更 - 若用自建 ACME 客户端(如 acme.sh),将其部署为 CronJob,续期后执行
kubectl rollout restart deployment/nginx或调用 Nginx reload 接口(需启用nginx -s reload的 readinessProbe 支持) - 确保 Nginx 配置中
ssl_certificate指向的是挂载路径,而非生成路径,避免因路径错位导致 reload 失败
安全参数需适配云基础设施特性
公有云 LB(如 ALB、CLB、NLB)常终止 TLS,此时 Nginx 实际处理的是 HTTP 流量,SSL 配置逻辑需分层设计:
- 若云 LB 终止 HTTPS:Nginx 配置中可省略
ssl_*指令,专注后端代理与 HSTS 响应头(add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;) - 若 Nginx 自行终止单端 HTTPS(如裸金属或边缘节点):必须启用 TLSv1.2/TLSv1.3,禁用 TLSv1.0/1.1;加密套件推荐使用支持前向保密的 ECDHE + AES-GCM/ChaCha20;并开启 OCSP Stapling(需配置 resolver 和 trusted certificate)
- 务必启用
http2 on(监听语句加http2),云网络延迟低,HTTP/2 多路复用优势明显;同时设置ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;提升会话复用率
健康检查与可观测性增强
云平台依赖健康探针判断实例可用性,SSL 配置需避免干扰:
- 为 443 端口单独配置一个轻量
location = /healthz,返回 200,不走 proxy_pass,且不强制校验证书(避免因 OCSP stapling 失败导致探针失败) - 记录 SSL 握手日志:在
log_format中加入$ssl_protocol $ssl_cipher $ssl_session_reused,便于排查握手失败、旧客户端兼容问题 - 配合云监控(如 Prometheus + nginx-vts-exporter),采集
nginx_ssl_handshakes_total、nginx_ssl_handshakes_failed_total等指标,及时发现 TLS 协议降级或证书过期风险

















