Балансировка нагрузки при недоступности backend

kseleznyov nginx-forum на forum.nginx.org
Пт Ноя 9 14:11:45 UTC 2018


Ситуация такая: слушаем порт 80 и перекидываем запрос с него на порты 8080 и
8081. За каждым из этих портов стоит FCGI-бекэнд. Примерный файл
конфигурации:


# настройка upstream - делаем балансировку на два разных порта
upstream http_stream {
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
}

# основная точка входа, нагрузка на которую балансируется между портами 8080
и 8081
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        location / {
            proxy_pass  http://http_stream;
        }
}

# первый бекэнд - пробрасываем на FCGI по Unix Socket
server {
        listen 8080 default_server;
        listen [::]:8080 default_server;

        server_name _;

        location / {
                fastcgi_pass unix:/home/skostik/sockets/1.sock;
        }
}

# второй бекэнд - пробрасываем на FCGI по Unix Socket
server {
        listen 8081 default_server;
        listen [::]:8081 default_server;

        server_name _;

        location / {
                fastcgi_pass unix:/home/skostik/sockets/2.sock;
        }
}


Проблема: если бекэнд не отвечает по сокету
unix:/home/skostik/sockets/1.sock (т.е. nginx не может установить
соединение), то nginx не делает балансировку (не перекидывает запрос на порт
8081), а возвращает ошибку. Можно ли настроить систему так, чтобы: если один
бекэнд недоступен, то нужно слать исходный HTTP-запрос на другой порт.

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,281886,281886#msg-281886



Подробная информация о списке рассылки nginx-ru