You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx配置主备服务器流量自动切换的实现方法咨询

Nginx主备服务器自动故障切换实现方案

Nginx本身没有原生的if...else逻辑来实现这种故障自动切换,更靠谱的方案是用upstream块配合故障转移指令来实现,这也是官方推荐的方式,比用if判断更稳定可靠。

针对/rc/temp/路径的主备配置

基础主备切换(基于请求失败)

首先在Nginx的http块下定义上游服务器组,区分主备:

upstream rc_temp_backend {
    server rc1-test.jer.com:443;  # 主服务器
    server rc2-test.jer.com:443 backup;  # 备用服务器,添加backup标记后,仅当主服务器不可用时才会被选中
}

然后修改对应的location配置,指向这个上游组,并配置故障触发条件:

location /rc/temp/ {
    proxy_pass https://rc_temp_backend;
    
    # 指定哪些场景下触发切换到备用服务器
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    
    # 可选:设置超时时间,避免请求长时间挂起
    proxy_connect_timeout 5s;
    proxy_send_timeout 10s;
    proxy_read_timeout 10s;
}

这种方式下,当主服务器返回配置中指定的错误、超时等情况时,Nginx会自动将请求转发到备用服务器。

主动健康检查(更精准的状态检测)

如果需要Nginx主动探测服务器健康状态(而不是等请求失败才切换),可以使用第三方模块ngx_http_upstream_check_module(开源免费),或者Nginx Plus的内置健康检查功能。以下是开源模块的配置示例:

upstream rc_temp_backend {
    server rc1-test.jer.com:443;
    server rc2-test.jer.com:443;
    
    # 健康检查规则:每隔3秒发送一次健康请求,连续2次失败标记为不可用,连续2次成功恢复可用
    check interval=3000 rise=2 fall=2 timeout=1000 type=http;
    # 发送的健康检查请求内容(根据后端服务的健康检查接口调整)
    check_http_send "GET /health HTTP/1.1\r\nHost: rc1-test.jer.com\r\nConnection: close\r\n\r\n";
    # 认为服务器健康的响应状态码
    check_http_expect_alive http_2xx http_3xx;
}

配置后,Nginx会主动检测服务器状态,只有健康的服务器会被分配请求,无需等待请求失败再切换。

其他路径的优化建议

你现有配置中的if语句在Nginx中存在潜在风险(Nginx的if不是常规的条件判断,可能导致意外行为),如果需要基于变量分流,建议用map指令替代。比如针对/rc/路径的配置可以优化为:

map $testip $rc_backend {
    default http://192.168.0.103;
    1 http://192.168.0.100;  # 假设$testip为1时切换到该服务器
}

location /rc/ {
    proxy_pass $rc_backend;
}

如果这个路径也需要主备,同样可以结合upstream块实现。

内容的提问来源于stack exchange,提问作者Vitalii Fedorenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:25:06