Nginx 应作为统一 TLS 终结点集中管控:强制 TLSv1.2+、PFS 密码套件;全局 HTTPS 重定向与 HSTS;证书通过 Secret 和 cert-manager 集中管理;上游启用证书校验及可选 mTLS。

在分布式微服务网关中,Nginx 不应作为每个服务的独立 TLS 终结点重复配置,而应下沉为统一策略执行层——核心是把加密逻辑“收口”到网关入口,避免策略分散、版本不一、证书管理混乱。
统一 TLS 协议与密码套件
所有 HTTPS 流量必须强制使用 TLSv1.2 及以上,禁用 TLSv1.0/v1.1;密码套件优先选用前向保密(PFS)强算法,如 ECDHE-ECDSA-AES128-GCM-SHA256 或 TLS_AES_128_GCM_SHA256。这些配置不应写在每个 server 块里,而应集中定义在全局 Nginx 配置或 Ingress Controller 的 ConfigMap 中:
- 在
nginx-configurationConfigMap 中设置:ssl-protocols: "TLSv1.2 TLSv1.3"ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256" - 配合
ssl-prefer-server-ciphers: "on"确保客户端不绕过服务端策略
全局强制 HTTPS 与 HSTS 管控
HTTP 到 HTTPS 的跳转、HSTS 头下发等行为,属于基础设施级安全策略,必须由网关层统一下发,而非交由各微服务自行处理:
- 启用
ssl-redirect: "true"和force-ssl-redirect: "true",使所有 HTTP 请求 308 永久跳转至 HTTPS - 开启
hsts: "true"并设hsts-max-age: "31536000"(1年),确保浏览器后续访问自动走 HTTPS - 该策略对所有 Ingress 资源生效,无需在每个 YAML 中重复声明
集中式证书管理与自动轮换
避免为每个域名单独配置 ssl_certificate 和 ssl_certificate_key。推荐两种方式:
- 使用
default-ssl-certificate字段指定默认 Secret(格式:namespace/name),让未显式声明 TLS 的 Ingress 自动复用通配符或组织级证书 - 对接外部证书管理器(如 cert-manager),通过 annotation 触发自动签发,并将生成的 Secret 同步至网关层,Nginx 仅引用 Secret 名称即可
- 私钥始终不落地到 Nginx 配置文件,全部以 Kubernetes Secret 形式挂载,提升密钥安全性
上游 TLS 校验与 mTLS 支持
若网关需与后端微服务建立加密连接(如 service-to-service TLS),必须统一开启并校验上游证书,防止中间人攻击:
- 在 upstream 或 location 块中启用:
proxy_ssl_verify on;proxy_ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.crt;proxy_ssl_name "svc-name.namespace.svc.cluster.local";proxy_ssl_server_name on; - 如需双向认证(mTLS),还需在 Ingress-Nginx Controller 中配置 client CA 证书,并通过
nginx.ingress.kubernetes.io/auth-tls-secretannotation 关联验证规则


















