高性能全站HTTPS负载均衡集群需协同Nginx(SSL终结与七层分发)、Keepalived(VIP主备高可用)和Certbot(自动证书管理):Nginx配置443端口HTTPS监听、HSTS与安全协议,upstream启用健康检查与least_conn/ip_hash策略,Keepalived设一致virtual_router_id、nopreempt及vrrp_script进程检测,全链路验证VIP漂移、HTTPS响应头与压测分流效果。

要实现高性能全站 HTTPS 负载均衡集群,核心是把三件事串起来:Nginx 做七层负载分发 + Keepalived 实现主备自动切换 + 全链路 HTTPS 加密。不是简单堆砌组件,而是让它们协同工作——Nginx 处理请求路由和 SSL 终结,Keepalived 确保入口不中断,证书管理保障加密可信。
一、HTTPS 全站落地的关键配置
Nginx 必须承担 SSL 终结角色,即客户端 HTTPS 请求由 Nginx 解密后以 HTTP(或 HTTPS)转发给后端。这样既减轻后端压力,又便于统一管理证书与安全策略。
- 使用 Certbot 自动申请并续期 Let’s Encrypt 泛域名证书,存放在 /etc/letsencrypt/live/example.com/
- server 块中启用 HTTPS 监听,强制 301 重定向所有 HTTP 流量:
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; - 开启 HSTS(add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;),防止协议降级
- 禁用不安全协议与弱密码套件,推荐 TLSv1.2+,排除 SSLv3、TLSv1.0 和 DES/RC4 类算法
二、Nginx 负载均衡的生产级 upstream 设计
upstream 不只是列几台服务器,它决定了流量如何健康、公平、有韧性地分发。
- 选用 least_conn 或 ip_hash 策略:前者适合长连接或响应时间差异大的后端;后者用于需会话保持的场景(注意:与 cookie sticky 配合时更稳妥)
- 为每台后端设置 weight(如 3:2:1)反映实际处理能力,避免“平均主义”导致过载
- 必须配置健康检查参数:max_fails=2 fail_timeout=30s,表示连续两次失败即摘除,30 秒后自动重试;配合 proxy_next_upstream error timeout http_500 http_502 http_503 http_504 实现故障转移
- 后端建议启用 HTTPS(即 proxy_pass https://backend),实现端到端加密;若性能敏感,可内部走 HTTP,但需确保内网可信
三、Keepalived 主备协同防单点
Keepalived 不是“装上就高可用”,关键在状态逻辑与容错细节。主备节点都配为 BACKUP 并启用 nopreempt,才能避免脑裂和频繁 VIP 抢占。
- 主备节点 virtual_router_id 必须一致(如 40),interface 指向真实网卡(如 eth0),不能写错
- 优先级(priority)仅在初始选举时起作用;启用 nopreempt 后,先启动者成为 Master,后续节点即使 priority 更高也不会抢 VIP
- 必须配置 vrrp_script 健康检查脚本,例如检测 Nginx 进程是否存活、端口是否响应、甚至调用 /nginx_status 接口验证服务健康度
- 认证块 auth_pass 需两端一致,且长度建议为 8 位以上随机字符串,防止 VRRP 报文被伪造
四、全链路验证与压测闭环
上线前必须验证三个层面是否真正贯通:VIP 是否漂移正常、HTTPS 是否全站生效、负载是否真实分摊。
- 用 curl -I https://your-domain.com 检查返回 HTTP/2 200 及 Strict-Transport-Security 头
- 停掉主节点 Keepalived,观察 VIP 是否秒级漂移到备节点(ip a s 查看),同时业务无感知中断
- 通过 wrk -t4 -c100 -d30s https://vip-address/ 对 VIP 压测,结合后端 access_log 或 Prometheus + Grafana 查看各节点请求数是否符合 weight 分配比例
- 模拟某台后端宕机(如 systemctl stop nginx),确认 Nginx 自动剔除该节点,且 upstream server 状态变为 down(可通过 /nginx_status 接口查看)



















