nginx与后端建立安全连接需主动控制:启用https上游、严格校验证书、禁用tls 1.0/1.1、限定强加密套件、显式指定http/1.1并复用连接,grpc和websocket须分别用grpc_pass及透传upgrade头。

要让 Nginx 与后端服务之间建立符合严格安全协议要求的连接,核心不是“适配后端的协议”,而是主动控制 Nginx 到后端的通信方式:用 HTTPS 加密、验证证书、禁用弱协议、限制加密套件,并确保连接行为可控。多数后端(如 Spring Boot、Node.js、Go HTTP Server)默认只监听 HTTP/1.1 明文或 TLS 1.2+ HTTPS,Nginx 必须明确按需协商,不能依赖自动降级。
启用 HTTPS 上游连接并校验证书
Nginx 默认以 HTTP 连接后端,若后端强制要求 TLS,则必须显式使用 https:// 协议,并开启证书校验:
- 在
upstream中直接写https://地址(Nginx ≥ 1.19.5 支持):upstream secure_backend { server https://10.10.20.5:8443; } - 同时在
location中启用严格校验:proxy_ssl_verify on; proxy_ssl_trusted_certificate /etc/nginx/ssl/backend-ca.crt; # 后端 CA 根证书路径 proxy_ssl_verify_depth 2; proxy_ssl_name "api.internal"; # 匹配后端证书的 SAN 或 CN
⚠️ 若后端用自签名证书,必须把签发它的私有 CA 公钥放入
trusted_certificate;否则会返回502 Bad Gateway。
禁用不安全 TLS 版本与弱加密套件
即使后端支持 TLS 1.3,Nginx 若未显式约束,仍可能协商出 TLS 1.1 或弱 cipher:
- 在
http或server块中统一限制(推荐放在http块避免遗漏):ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on;
- 不要写
TLSv1或TLSv1.1,哪怕只是“兼容考虑”——这些协议已被 IETF 废弃,存在 POODLE、BEAST 等可利用漏洞。
强制 HTTP/1.1 长连接,避免协议错配
后端若仅支持 HTTP/1.1(绝大多数 Java/Python/Node 应用),却误启 proxy_http_version 2.0,会导致 502 或 upstream prematurely closed connection:
- 显式声明协议版本并复用连接:
proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr;
- 在
upstream中启用连接池:upstream secure_backend { server https://10.10.20.5:8443; keepalive 32; }这样既满足后端对 HTTP/1.1 的要求,又通过
keepalive减少 TLS 握手开销,比盲目升级到 h2 更稳定。
针对 gRPC 或 WebSocket 等特殊协议单独处理
严格安全协议 ≠ 统一配置,不同协议有专属要求:
- gRPC(基于 HTTP/2 + TLS):必须用
grpc_pass,不能用proxy_pass:location /grpc/ { grpc_pass grpc://127.0.0.1:50051; grpc_set_header Host $host; # 仍需 ssl_protocols TLSv1.2 TLSv1.3 和强 cipher } - WebSocket:需透传
Upgrade头并保持长连接:proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400;
它们都依赖上游启用对应协议,Nginx 只负责正确转发和头透传,不参与协议协商。
不复杂但容易忽略











