LINUX.ORG.RU

История изменений

Исправление Pinkbyte, (текущая версия) :

Nginx по умолчанию по разному резолвер использует.

Если как у ТСа через

set $variable "http://backend:port";
proxy_pass $variable;
- то запись перезапрашивается ровно по истечению TTL, пришедшего от сервера. Но ТОЛЬКО если в конфиге указан параметр resolver, системный резолвер nginx использовать почему-то не хочет.

Есть еще те, кто настраивают DNS по древним методичкам и у них там TTL сутки стоит. Какой TTL отдаёт docker-овский DNS - я даже проверять не стал, с дефолтными настройками он меня не устраивал.

А вот если настраивать сразу, без переменной:

proxy_pass "http://backend:port";

то оно мало того, что резолвится строго ОДИН раз(и тут почему-то прекрасно работает системный резолвер, удивительно прям) при старте nginx(ну может еще при перечитывании конфига, тут не проверял), так еще и если адрес хотя бы одного backend не резолвится вообще - то nginx не стартует с соответсвующей ошибкой в логах :-)

Пока nginx стартует позже всех сервисов - это можно и не заметить, но рано или поздно эту особенность конфигурации придется осознать, принять и сделать всё правильно.

Исходная версия Pinkbyte, :

Nginx по умолчанию по разному резолвер использует.

Если как у ТСа через

set $variable "http://backend:port";
proxy_pass $variable;
- то запись меняется ровно по истечению TTL, пришедшего от сервера. А есть те, кто настраивают DNS по древним методичкам и у них там TTL сутки стоит. Какой TTL отдаёт docker-овский DNS - я даже проверять не стал.

А вот если настраивать сразу, без переменной:

proxy_pass "http://backend:port";

то оно мало того, что резолвится строго ОДИН раз при старте nginx(ну может еще при перечитывании конфига, тут не проверял), так еще и если адрес хотя бы одного backend не резолвится вообще - то nginx не стартует с соответсвующей ошибкой в логах :-)

Пока nginx стартует позже всех сервисов - это можно и не заметить, но рано или поздно эту особенность конфигурации придется осознать, принять и сделать всё правильно.