A resolução upstream interrompe a configuração

A resolução upstream interrompe a configuração

Estou no Ubuntu 16.04 com o NGINX mais recente instalado emseu repositório oficial:

$ sudo nginx -v
nginx version: nginx/1.11.8

Eu tenho o seguinte definido em /etc/nginx/sites-available/greendot.conf:

# local dnsmasq
resolver 127.0.0.1;

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

upstream websocket {
  zone elixr 64k;
  server greendot-elixr-1:4000 resolve;
  server greendot-elixr-2:4000 resolve;
}

server {
  listen 4000;
  location / {
    proxy_pass http://websocket;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
  }
}

eu tenho seguidoa documentação sobre como configurar servidores upstream resolvidos por DNS, e ainda assim esta configuração falha:

$ sudo nginx -T
nginx: [emerg] invalid parameter "resolve" in /etc/nginx/sites-enabled/greendot-nginx.conf:11
nginx: configuration file /etc/nginx/nginx.conf test failed

Meu objetivo é simplesmente criar um servidor que use DNS para resolver periodicamente seus membros. O que estou fazendo de errado?

Responder1

O resolveparâmetro faz parte da oferta comercial do nginx.

Aqui está a abordagem que acabei usando:

server {
    ...

    # Use docker's internal nameserver
    resolver 127.0.0.11 valid=10s ipv6=off;

    location / {
        set $target myproject-web;
        proxy_pass  http://$target:8000;
    }
}

Observe que:

  • Você deve definir uma variável (como $target), ou o nginx consultará uma vez e usará o(s) IP(s) resultante(s) para sempre (ignorando o parâmetro 'válido' do resolvedor).
  • Se a consulta DNS retornar vários IPs; O nginx fará round-robin para eles.
  • Essa abordagem pode não funcionar para você se você tiver requisitos de upstream mais complexos (endpoints de backup, etc.).

informação relacionada