配置Nginx实现后端服务器故障自动切换的容错机制
Nginx 后端服务器故障自动切换配置方案
要实现两台后端服务器的故障自动切换,核心是利用Nginx的upstream模块结合健康检查参数,无需复杂第三方模块,基础配置就能满足需求。以下是完整配置示例和关键说明:
基础双活故障切换配置
这种配置下两台服务器正常时按默认轮询策略分发流量,当其中一台宕机时,流量会自动切换到另一台:
http { # 定义后端服务器组 upstream backend_servers { # 第一台后端服务器:失败3次后标记为不可用,30秒后重试 server 192.168.1.100:8080 max_fails=3 fail_timeout=30s; # 第二台后端服务器:配置相同健康检查规则 server 192.168.1.101:8080 max_fails=3 fail_timeout=30s; } server { listen 80; server_name your_domain.com; # 替换为你的域名或IP location / { proxy_pass http://backend_servers; # 必要代理头配置,确保后端获取正确请求信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理超时配置,避免请求长时间挂起 proxy_connect_timeout 5s; proxy_send_timeout 10s; proxy_read_timeout 10s; } } }
主备模式配置(可选)
如果希望优先使用某一台服务器,仅当主服务器宕机时才切换到备用服务器,可给备用服务器添加backup参数:
upstream backend_servers { server 192.168.1.100:8080 max_fails=3 fail_timeout=30s; # 主服务器 server 192.168.1.101:8080 max_fails=3 fail_timeout=30s backup; # 备用服务器 }
关键参数解释
max_fails=3:Nginx在fail_timeout时间段内,尝试连接后端服务器失败3次后,将该服务器标记为不可用fail_timeout=30s:标记为不可用的服务器,30秒内不会接收新请求;30秒后Nginx会重新尝试连接,若恢复正常则重新加入流量分发
验证方法
- 保存配置后,执行
nginx -s reload加载新配置 - 手动停止其中一台后端服务器,通过浏览器或
curl发送请求,确认流量自动切换到正常服务器 - 恢复宕机的服务器,等待30秒后,检查是否重新参与流量分发
注意事项
- 确保Nginx服务器能访问后端服务器的目标端口,防火墙规则需放行相关流量
- 默认健康检查基于连接状态和HTTP返回码,若需要更精细的检查(如检测特定接口),可编译Nginx时加入第三方
ngx_http_healthcheck_module,但基础配置已能覆盖大部分场景 - 配置完成后务必模拟宕机场景测试,确保切换逻辑生效
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

