Nginx 必须在入口层终止 HTTPS(SSL 卸载),再以 HTTP 转发至后端;需正确配置 TLS、upstream、HTTP 重定向及请求头透传。

Nginx 本身不能“在负载均衡架构下配置后端 HTTPS 终止”——这个说法存在概念混淆。HTTPS 终止(TLS termination)必须由 Nginx 自己完成,而不是交给后端;所谓“后端 HTTPS 终止”实际是误解,正确目标应是:Nginx 终止 HTTPS,再以 HTTP 转发给后端(即 SSL 卸载),这是标准、高效、可维护的架构。
如果你的真实需求是:让 Nginx 作为负载均衡器,统一处理外网 HTTPS 流量,并安全、高性能地分发到多个后端服务,那么关键不在“后端终止”,而在 Nginx 层的三重协同:
✅ 正确终止 TLS(解密)
✅ 合理定义 upstream(负载分发)
✅ 精准透传协议与客户端信息(避免后端误判)
下面分四部分讲清实操要点:
HTTPS 必须在 Nginx 入口层终止
不要试图让后端承担证书管理或 TLS 握手。Nginx 需监听 443 ssl http2,加载有效证书,并启用现代安全策略:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 使用完整证书链:
ssl_certificate /etc/nginx/certs/fullchain.pem;和ssl_certificate_key /etc/nginx/certs/privkey.pem; - 仅允许强协议:
ssl_protocols TLSv1.2 TLSv1.3; - 禁用弱加密套件,推荐前向保密组合:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...; - 开启 HSTS 强制加密:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
HTTP 跳转必须独立放在 80 端口 server 块中
重定向逻辑不能嵌套在代理流程里,否则会失效或引发循环。单独写一个监听 80 的 server:
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }- 不要用
if ($scheme = http) { ... }放在 443 块里——这属于反模式,Nginx 官方明确不推荐 - 确保
$host与证书绑定域名完全一致,否则跳转后浏览器报证书错误
upstream 必须指向后端 HTTP 地址,且启用 keepalive 连接池
后端服务应监听 HTTP(如 :8080),而非 HTTPS;Nginx 解密后走明文内网转发,既省资源又保复用:
- 在
http块顶层定义 upstream:upstream app_cluster { server 192.168.1.10:8080; server 192.168.1.11:8080; keepalive 32; } -
keepalive 32表示每个 worker 进程缓存最多 32 条空闲连接,值建议按后端单实例平均并发 × 1.2~1.5 设定 - 搭配
least_conn调度更公平(尤其长连接场景),避免某节点堆积过多连接 -
proxy_pass http://app_cluster;—— 注意是 http://,不是 https://
请求头必须真实透传,否则后端逻辑会出错
后端虽走 HTTP,但需知道原始请求是 HTTPS、来自哪个真实 IP,否则登录跳转、安全判断、日志溯源全会失真:
-
proxy_set_header Host $host;—— 防止后端因 Host 缺失而路由失败 -
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -
proxy_set_header X-Forwarded-Proto $scheme;或固定写https(若入口只走 HTTPS) - 禁用 Nginx 版本暴露:
server_tokens off;(建议放在 http 块)

















