У меня получилось это сделать, путём введения дополнительного слоя проксирования, так сказать "проксирования самого на себя". Вот моя конфигурация (для проверки в моей песочнице запущен DNS-сервер dnsmasq, который резолвит все домены *.localdomain в 127.0.0.1):
resolver 127.0.0.1 ipv6=off;
upstream bundle {
server unix:/tmp/nginx-app.sock; # заменить на "app"
server unix:/tmp/nginx-fallback.sock backup; # заменить на "fallback"
}
server {
listen 127.0.0.1:80;
server_name upstream-loopback.localdomain;
location / {
proxy_pass http://bundle;
}
}
# Второй слой проксирования
# Чтобы минимизировать накладные расходы, вместо TCP-порта слушаем UNIX-сокет
server {
listen unix:/tmp/nginx-app.sock;
set $backend upstream-loopback-app.localdomain; # заменить на "app"
location / {
proxy_pass http://$backend;
}
}
server {
listen unix:/tmp/nginx-fallback.sock;
set $backend upstream-loopback-fallback.localdomain; # заменить на "fallback"
location / {
proxy_pass http://$backend;
}
}
# Эти блоки используются только для проверки того, что приведенный выше подход работоспособен
server {
listen 127.0.0.1:80;
server_name upstream-loopback-app.localdomain;
return 200 "Response from the app backend\n";
}
server {
listen 127.0.0.1:80;
server_name upstream-loopback-fallback.localdomain;
return 200 "Response from the fallback backend\n";
}