b. Nginx
O Nginx é configurado como um proxy reverso HTTP usando um bloco upstream que define o pool de servidores de backend. Quando o Docker Compose sobe várias réplicas do serviço gateway, o DNS interno do Docker resolve o nome de serviço gateway para os endereços IP de todas as réplicas. O Nginx consulta esse registro DNS na inicialização e monta seu pool upstream com todos os endereços retornados.
Crie o arquivo setup/nginx/nginx.conf:
| nginx.conf | |
|---|---|
Diretivas principais:
| Diretiva | Finalidade |
|---|---|
upstream gateways | Dá nome a um pool de servidores de backend. O DNS do Docker expande gateway:8080 para os IPs de todas as réplicas na inicialização. |
least_conn | Algoritmo de balanceamento de carga: cada nova requisição vai para a réplica com menos conexões ativas. |
proxy_pass | Encaminha a requisição correspondente para o pool upstream. |
X-Real-IP | Repassa o endereço IP original do cliente ao serviço de backend. |
X-Forwarded-For | Acrescenta o IP do cliente à cadeia de encaminhamento padrão — usado em logs e trilhas de auditoria. |
X-Forwarded-Proto | Informa ao backend se a requisição original chegou via HTTP ou HTTPS. |
Trocando o algoritmo
O algoritmo é declarado dentro do bloco upstream. Substitua least_conn por qualquer uma das opções a seguir:
| Diretiva | Algoritmo |
|---|---|
| (nenhuma) | Round Robin (padrão) |
least_conn; | Least Connections |
ip_hash; | IP Hash (sticky sessions) |
random; | Random |
O Weighted Round Robin usa parâmetros weight por servidor: server gateway:8080 weight=3;
Resolução de DNS e escalonamento dinâmico
O Nginx resolve o hostname gateway uma única vez na inicialização e guarda em cache a lista de IPs retornada. Subir a stack com um número fixo de réplicas (definido no compose.yaml) garante que o Nginx reconheça todas as instâncias ao iniciar. Se réplicas forem adicionadas depois, o Nginx precisa ser recarregado para descobri-las:
A estrutura do projeto resultante após adicionar o arquivo de configuração: