resolver: A vs AAAA

Dmitry Sivachenko trtrmitya на gmail.com
Ср Дек 14 18:38:41 UTC 2016


> On 14 Dec 2016, at 20:50, Maxim Dounin <mdounin на mdounin.ru> wrote:
> 
> Hello!
> 
> On Wed, Dec 14, 2016 at 08:06:31PM +0300, Dmitry Sivachenko wrote:
> 
>>> On 14 Dec 2016, at 19:59, Maxim Dounin <mdounin на mdounin.ru> wrote:
>>> 
>>> Если в конфиге действительно proxy_pass на имя - то при чём тут 
>>> resolver?  Первыми будет использоваться IPv4-адреса из-за порядка 
>>> сохранения записей, который случается в ngx_inet_resolve_host().
>>> 
>>> Однако как и в случае resolver'а - порядок ни на что не влияет, 
>>> кроме, может быть, отдельных краевых эффектов, т.к. все полученные 
>>> адреса будут использоватся и запросы между ними будут 
>>> балансироваться по round-robin.
>> 
>> Допустим, что nginx работает на ipv6-only сервере, а some.ip (аргумент proxy_pass) -- имеет и A, и AAAA.
>> Я не хочу чтобы nginx вообще пытался устанавливать соединение к ipv4-адресу.
> 
> Если у вас ipv6-only сервер - так и будет, т.к. nginx использует 
> getaddrinfo() с флагом AI_ADDRCONFIG, и неподдерживаемые адреса 
> система просто не вернёт nginx'у.


В моем случае на машине настроены ipv4-over-ipv6 туннели, так что реально ipv4-адреса на интерфейсе есть, но роутинг работает только для ipv6.

Раз используется getaddrinfo(), то эта функция как раз возвращает адреса в нужном порядке (учитывает ip6addrctl_policy).

Так что кажется что проблема лишь в 
----------
Первыми будет использоваться IPv4-адреса из-за порядка 
сохранения записей, который случается в ngx_inet_resolve_host().
----------

Если сохранять порядок, возвращаемый getaddrinfo(), то будет то поведение, которое нужно.


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