Nginx GeoIP 负载平衡与故障转移

Nginx GeoIP 负载平衡与故障转移

我正在尝试设置一个测试 Nginx 负载平衡环境。到目前为止,我已成功配置了一个负载平衡器nginx-balancer1和 3 台服务器来提供网页服务nginx1, nginx2 & nginx3

我想根据访问者的 IP 按地区平衡负载。我已将 Nginx 配置nginx-balancer1为使用 Maxmind GeoIP 国家/地区数据。

以下是我对上游服务器的配置:

# Check where the user is coming from
server {
  location / {
    if ($geoip_city_continent_code = "EU") { proxy_pass http://ams1; }
    if ($geoip_city_continent_code = "NA") { proxy_pass http://sfo1; }
    if ($geoip_city_continent_code = "AS") { proxy_pass http://sgp1; }
}
}
# Define upstream servers
upstream ams1 { server server1.example.com; }
upstream sfo1 { server server1.example.com; }
upstream sgp1 { server server1.example.com; }

这似乎运行良好,但是如果我关闭 nginxams1 (server1.example.com)并尝试转到主页,我会收到502 Bad Gateway错误。

我想弄清楚的是,如果服务器瘫痪了,我该如何nginx-balancer1重定向到另一台服务器,要么是下一个最近的服务器,要么是下一个正常运行的服务器。

有人可以帮忙吗?

谢谢

答案1

听起来你正在寻找的是 proxy_next_upstream代理连接超时. 因此,您可以执行以下操作:

proxy_next_upstream     error timeout invalid_header http_500;
proxy_connect_timeout   2;

基本上,如果检测到故障,后端将被标记为关闭 x 秒,然后它会再次尝试。Nginx 将尝试上游块中的下一个条目,因此一旦关闭的上游恢复,它应该会自动在上游池中重新启用。

相关内容