Hello! On Thu, Jan 12, 2023 at 04:37:40PM +0300, Sergey K wrote:
> В документации сказано, что можно использовать upstream с переменными > (stream module). > > ---- > proxy_pass $upstream; > В этом случае имя сервера ищется среди описанных групп серверов и если не > найдено, то определяется с помощью resolver’а. > ---- > > Однако, в случае изменения айпи адреса для postgres.local nginx не видит > изменений и продолжает обращаться к старому айпи адресу апстрима. > > nginx/1.18.0 > > ---- > upstream postgres { > server postgres.local:5432; > } > > map stream $upstream { > default postgres; > } > > server { > listen 5432; > > access_log /var/log/nginx/stream.access.log proxy buffer=32k > flush=10s; > > proxy_pass $upstream; > resolver 10.0.0.2 valid=30s; > } > ---- > > похоже на баг либо я делаю что-то не верно? У вас имя сервера, указанного в proxy_pass, ищется среди описанных групп серверов, и оно найдено - в конфигурации есть upstream с именем "postgres". Соответственно resolver не используется. Что до имени сервера, указанного в группе серверов "postgres", а именно "postgres.local", то это имя по общим правилам преобразуется в IP-адреса при загрузке конфигурации. Если хочется, чтобы nginx разнимался преобразованием имени в IP-адреса при каждом обращении, то не надо описывать upstream, а следует просто указать имя сервера с использованием переменных, как-то так: map stream $upstream { default "postgres.local:5432"; } server { ... proxy_pass $upstream; resolver 10.0.0.2 valid=30s; } -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-ru