Я пытаюсь настроить тестовую среду 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 попробует следующую запись в восходящем блоке, поэтому, как только нисходящий восходящий поток вернется вверх, он должен автоматически быть повторно включен в восходящем пуле.