Назад | Перейти на главную страницу

Балансировка нагрузки Nginx GeoIP с аварийным переключением

Я пытаюсь настроить тестовую среду Nginx с балансировкой нагрузки. Пока что я успешно настроил балансировщик нагрузки nginx-balancer1 и 3 сервера для обслуживания веб-страниц nginx1, nginx2 & nginx3.

Я хочу сбалансировать нагрузку по регионам в зависимости от IP посетителя. Я настроил свой Nginx nginx-balancer1 использовать данные Maxmind GeoIP Country.

Итак, вот моя конфигурация вышестоящих серверов:

# 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; }

Кажется, это работает хорошо, однако, если я выключу nginx, скажем, ams1 (server1.example.com) и пытаюсь перейти на главную страницу, я получаю 502 Bad Gateway ошибка.

Я хочу выяснить, если сервер не работает, как я могу получить nginx-balancer1 для перенаправления на другой сервер, ближайший к следующему или следующий работающий сервер.

Кто-нибудь может помочь?

Спасибо

Похоже, вы ищете proxy_next_upstream и proxy_connect_timeout. Итак, вы бы сделали что-то вроде:

proxy_next_upstream     error timeout invalid_header http_500;
proxy_connect_timeout   2;

Обычно при обнаружении сбоя серверная часть будет помечена как неработающая в течение x секунд и попытается снова. Nginx попробует следующую запись в восходящем блоке, поэтому, как только нисходящий восходящий поток вернется вверх, он должен автоматически быть повторно включен в восходящем пуле.