Re: nginx stream module, dynamic upstream

2023-01-12 Пенетрантность Maxim Dounin
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


Re: nginx stream module, dynamic upstream

2023-01-12 Пенетрантность Илья Шипицин
Это, видимо, неточность документации, надо днс имя + пустую переменную
непосредственно в proxy_pass, а upstream по крайней мере в опенсорс
варианте днс ресолвтт на момент релоада

On Thu, Jan 12, 2023, 7:37 PM 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;
>   }
> 
>
> похоже на баг либо я делаю что-то не верно?
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx-ru
>
___
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru