Nginx高性能SSL终止需四步:前端规范监听与证书加载(listen 443 ssl http2、fullchain.pem、私钥600权限);后端明文HTTP转发(proxy_pass http://,禁用https);可信透传X-Forwarded-Proto/X-Real-IP/X-Forwarded-For并限定可信源;显式调优性能参数(会话缓存、TLS1.2+/ECDHE套件、OCSP Stapling、HSTS)。

配置 Nginx 实现高性能 SSL 终止,核心不是“配通 HTTPS”,而是让 Nginx 真正承担 TLS 解密、协议优化与流量调度的全部职责,同时确保后端拿到准确、可信的原始请求信息。关键在于四件事:前端正确终止、后端明文转发、头信息真实透传、性能参数主动调优。
监听与证书加载必须规范
SSL 终止从监听开始,不能只写 listen 443,必须明确启用 SSL 和 HTTP/2:
- 使用
listen 443 ssl http2;(HTTP/2 能显著提升并发吞吐) - 证书路径要指向完整链路:
ssl_certificate /path/to/fullchain.pem;(含中间 CA),而非仅域名证书 - 私钥权限必须设为
600,且仅nginx用户可读 - 若管理多个域名,推荐用
map指令动态映射证书路径,避免硬编码
后端转发必须走明文 HTTP
SSL 卸载生效的前提是后端不参与 TLS 处理。所有 proxy_pass 必须以 http:// 开头,且 upstream 定义中 server 地址也必须是 http://ip:port:
- 错误写法:
proxy_pass https://backend;或upstream { server 10.0.1.10:443; } - 正确写法:
proxy_pass http://backend_pool;,配合upstream backend_pool { server 10.0.1.10:8080; } - 健康检查也要用 HTTP:
location /health { proxy_pass http://backend_pool/health; }
关键请求头必须透传且可信
后端依赖这些头判断协议类型、客户端 IP 和原始请求路径,但不能无条件信任——需结合 set_real_ip_from 限定可信来源:
-
proxy_set_header X-Forwarded-Proto $scheme;(告知后端原始是 HTTPS) -
proxy_set_header X-Real-IP $remote_addr;+set_real_ip_from 10.0.0.0/8;(只信任内网代理 IP) -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;(追加式传递,非覆盖) - 禁用危险头:
proxy_hide_header X-Powered-By;,防止信息泄露
性能与安全参数必须显式启用
默认配置无法应对高并发 TLS 流量。以下参数缺一不可:
- 会话复用:
ssl_session_cache shared:SSL:10m;+ssl_session_timeout 4h;(减少 70%+ 握手开销) - 协议与套件:
ssl_protocols TLSv1.2 TLSv1.3;,禁用 TLSv1.0/1.1;套件优先选ECDHE-ECDSA-AES128-GCM-SHA256类现代组合 - OCSP Stapling:
ssl_stapling on; ssl_stapling_verify on;+ssl_trusted_certificate(避免客户端直连 CA) - HSTS 强制 HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
不复杂但容易忽略



















