host not found in upstream: не появилась возможность игнорировать?

obolobova nginx-forum на forum.nginx.org
Чт Мар 16 13:56:33 UTC 2017


Здравствуйте.

У нас крутится nginx в докере, и проксирует запросы на большое количество
сервисов, тоже в контейнерах.
Все это хозяйство объединено в Docker overlay network, и адресация идет не
по реальным хостнеймам, а по именам/алиасам докер-контейнеров (DNS-резолвинг
обеспечивает сетевая инфраструктура докера).

Конфиг примерно такой:

upstream my_upstream1 {
	server DOCKER_CONTAINER1:8080 max_fails=0;
	server DOCKER_CONTAINER2:8080;
	keepalive 32;
}

# еще куча апстримов
upstream my_upstream2...
upstream my_upstream3...

server {
	server_name myurl.com;
	listen 80 ;
	access_log /var/log/nginx/access.log vhost;
	location / {
		proxy_pass http://my_upstream1;
		
		#также пробовали вариант с переменной
		set $my_var my_upstream1;
		proxy_pass http://$my_var;
	}
}

Проблема, наверное, уже понятна: если хоть один контейнер исчезает (упал,
удалили, машина провалилась под землю, whatever), то соответствующее имя не
резолвится и NGINX крэшится при старте.
Подчеркну, что проблема не в резолвере - он работает совершенно верно,
исчезнувший контейнер и не должен резолвиться - всё, его нет, и докер
убирает соответствующую запись из своего DNS.

Описанный выше вариант - штатная ситуация, в системе будут сотни апстримов и
тысячи контейнеров, какие-то из них будут падать обязательно.

Можно ли что-то сделать - на уровне штатного конфига - чтобы NGINX всё же
стартовал?
В гугле пишут, что либо ничего не сделать, либо использовать переменную в
proxy_pass - но нам не помогло. Если хоть одно имя хоть в одном upstream не
резолвится, NGINX не стартует.
Может быть, появился какой-то новый workaround?

Если нет, то, насколько я понимаю, остается вариант цеплять к NGINXу
дополнительный DNS, который все эти апстримы будет резолвить хоть бы на
127.0.0.1?

Большое спасибо.

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



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