nginx集群中https负载均衡本质是tls终止与请求分发合一:前端解密后以http/https转发至后端,需配置443端口ssl、强加密套件、hsts头、http自动跳转,并通过upstream定义加权/健康检查后端,配合keepalived实现vip漂移高可用。

在 Nginx 集群中实现 HTTPS 流量负载均衡,本质是把 TLS 终止和请求分发合并在 Nginx 层完成:前端统一处理加密/解密,再以明文 HTTP(或可选 HTTPS)转发给后端节点。整个链路安全、可控,且无需额外网关介入。
HTTPS 入口配置与 TLS 安全加固
这是流量入口的第一道防线,必须严格设置:
- 监听 443 端口并启用 HTTP/2:
listen 443 ssl http2; - 加载完整证书链和私钥:
ssl_certificate /path/to/fullchain.pem;和ssl_certificate_key /path/to/privkey.pem; - 仅允许现代协议:
ssl_protocols TLSv1.2 TLSv1.3; - 选用前向保密套件,禁用 RC4、SHA1 等弱算法:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - 强制浏览器只走 HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - HTTP 自动跳转 HTTPS:
if ($scheme = http) { return 301 https://$host$request_uri; }(或更推荐用单独 server 块监听 80 端口做重定向)
后端服务组(upstream)定义与健康调度
在 http 块内集中管理后端节点,支持灵活扩缩容和故障隔离:
- 基础轮询:
upstream app_backend { server 192.168.3.20:8080; server 192.168.3.21:8080; } - 按性能加权:
server 192.168.3.20:8080 weight=3;、server 192.168.3.21:8080 weight=1; - 会话保持(登录态场景):
ip_hash;放在 upstream 首行(注意:该策略下 weight 失效) - 主动健康检查:
max_fails=3 fail_timeout=30s;表示连续失败 3 次后剔除,30 秒后重试 - 备用节点:
server 192.168.3.22:8080 backup;,仅当其他节点全部不可用时启用
反向代理行为与真实请求透传
确保后端应用能正确识别原始客户端信息和业务上下文:
- 转发到 upstream:
proxy_pass http://app_backend;(若后端也启 HTTPS,可写成https://app_backend) - 重设 Host 头避免后端路由错乱:
proxy_set_header Host $host; - 传递真实 IP:
proxy_set_header X-Real-IP $remote_addr;,并追加X-Forwarded-For:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - 禁用不安全方法(如 TRACE、OPTIONS):
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|PATCH)$) { return 405; } - 隐藏 Nginx 版本:
server_tokens off;(建议放在 http 或 server 级)
高可用集群延伸:主备 Nginx + VIP 漂移
单台 Nginx 是瓶颈也是风险点,生产环境需叠加 Keepalived 实现自动故障切换:
- 部署两台 Nginx 节点(Master/Backup),共用一个虚拟 IP(VIP,如 192.168.3.100)
- Keepalived 通过 VRRP 协议监测主节点存活,宕机时秒级将 VIP 漂移到备节点
- 后端应用节点保持不变,上层流量无感切换
- 配合脚本检测 Nginx 进程健康状态(如
kill -0 $(cat /var/run/nginx.pid)),避免 VIP 漂移但服务未响应











