nginx双机热备响应质量提升关键在于构建keepalived与nginx协同的高可用闭环:需用综合健康检查脚本(验证配置、服务状态、业务探针)触发vip漂移,主备配置严格同步,系统层收敛干扰,并通过缓存、压缩等代理层容错机制保障零感知切换。

Nginx 本身不承担主备决策,双机热备的响应质量提升关键在于“让健康节点稳定承接流量、故障节点快速退出、切换过程零感知”。重点不是调 Nginx 参数,而是构建一套协同可靠的高可用闭环。
Keepalived 健康检查必须真实反映服务能力
单纯检测端口是否通(如 curl -I :80)极易误判:Nginx 进程活着,但 worker 全卡死、配置加载失败、磁盘写满、上游全不可达,此时仍对外暴露 VIP,请求进来就超时或 502。
应使用轻量脚本综合判断:
- 执行
nginx -t验证配置语法 - 检查
systemctl is-active nginx确认服务状态 - 发起真实业务探针:
curl -s --max-time 2 http://127.0.0.1/health | grep "ok"(需在 Nginx 中配/health返回简单 JSON)
在keepalived.conf中通过vrrp_script调用该脚本,并设置weight -20,使异常节点自动降级,主动让出 MASTER 身份。
Nginx 配置以“随时接管”为原则,拒绝冗余
热备节点虽不对外服务,但必须能在毫秒级完成角色切换并正常响应:
- 关闭非必要模块:禁用
realip(若无真实 IP 需求)、geoip2、复杂map或 Lua 脚本 -
worker_processes设为auto或固定小值(如2),避免抢占过多 CPU 资源 - 只启用基础优化:
sendfile on; tcp_nopush on; keepalive_timeout 30; - 所有 upstream 定义、SSL 证书路径、静态文件根目录必须与主节点完全一致,用
rsync -avz /etc/nginx/ web02:/etc/nginx/定期同步,避免配置漂移。
系统与网络层需收敛干扰、加速切换
双机热备不是只靠软件,底层稳定性直接影响响应质量:
- 停用争抢资源的服务:
systemctl stop postfix tuned && systemctl disable postfix tuned - 设置内核 ARP 行为:
net.ipv4.conf.all.arp_ignore = 1和net.ipv4.conf.all.arp_announce = 2,防止 VIP 切换时出现 ARP 冲突导致丢包 - Keepalived 心跳间隔设为
advert_int 1,既保证敏感度又避免过密误判;日志级别生产环境用notice,调试期再开debug
代理层本身要具备容错与缓冲能力
Nginx 在热备架构中不只是转发器,更是第一道防线:
- 对读多写少接口(如字典、公告页)启用
proxy_cache,配置proxy_cache_use_stale error timeout http_502 http_503,后端挂了也能返回旧缓存,保障可用性 - 启用
proxy_cache_lock on,防缓存击穿;设置proxy_cache_valid 200 302 10m控制缓存周期 - 静态资源走强缓存:
location ~* \.(js|css|png|jpg)$ { expires 365d; add_header Cache-Control "public, immutable"; } - 开启
gzip压缩(跳过已压缩类型),减少传输体积;open_file_cache缓存文件元信息,降低 stat 开销
不复杂但容易忽略











