Ситуация такая: слушаем порт 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-запрос на другой порт.