Quando se trata de configurar vários servidores de aplicativos para redundância, o balanceamento de carga é um mecanismo comumente usado para distribuir eficientemente solicitações de serviço de entrada ou tráfego de rede entre um grupo de servidores de back-end.
O balanceamento de carga tem várias vantagens, incluindo maior disponibilidade de aplicativos por meio de redundância, maior confiabilidade e escalabilidade (mais servidores podem ser adicionados quando o tráfego aumenta). Também traz melhorias no desempenho do aplicativo e muitos outros benefícios.
Leitura recomendada: O Guia Definitivo para Segurança, Reforço e Melhoria de Desempenho do Servidor Web Nginx
O Nginx pode ser implantado como um eficiente balanceador de carga HTTP para distribuir tráfego de rede de entrada e carga de trabalho entre um grupo de servidores de aplicativos, retornando em cada caso a resposta do servidor selecionado para o cliente apropriado.
Os métodos de balanceamento de carga suportados pelo Nginx são:
- round-robin – que distribui solicitações para os servidores de aplicativos de forma circular. É usado por padrão quando nenhum método é especificado,
- least-connected – atribui a próxima solicitação a um servidor menos ocupado (o servidor com o menor número de conexões ativas),
- ip-hash – onde uma função de hash é usada para determinar qual servidor deve ser selecionado para a próxima solicitação com base no endereço IP do cliente. Este método permite a persistência da sessão (vincular um cliente a um servidor de aplicação específico).
Além disso, você pode usar pesos de servidor para influenciar os algoritmos de balanceamento de carga do Nginx em um nível mais avançado. O Nginx também suporta verificações de saúde para marcar um servidor como falha (por um período configurável de tempo, o padrão é 10 segundos) se sua resposta falhar com um erro, evitando assim escolher esse servidor para solicitações posteriores por algum tempo.
Este guia prático mostra como usar o Nginx como um balanceador de carga HTTP para distribuir solicitações de clientes entre dois servidores, cada um com uma instância da mesma aplicação.
Para fins de teste, cada instância da aplicação é rotulada (na interface do usuário) para indicar o servidor em que está sendo executada.
Configuração do Ambiente de Teste
Load Balancer: 192.168.58.7 Application server 1: 192.168.58.5 Application server 2: 192.168.58.8
Em cada servidor de aplicação, cada instância da aplicação é configurada para ser acessada usando o domínio tecmintapp.lan
. Supondo que este seja um domínio totalmente registrado, adicionaríamos o seguinte nas configurações de DNS.
A Record @ 192.168.58.7
Este registro informa às solicitações dos clientes para onde o domínio deve ser direcionado, neste caso, o balanceador de carga (192.168.58.7). Os registros A
de DNS aceitam apenas valores IPv4. Alternativamente, o arquivo /etc/hosts nas máquinas cliente também pode ser utilizado para fins de teste, com a seguinte entrada.
192.168.58.7 tecmintapp.lan
Configurando o Balanceamento de Carga do Nginx no Linux
Antes de configurar o balanceamento de carga do Nginx, você deve instalar o Nginx em seu servidor usando o gerenciador de pacotes padrão de sua distribuição, conforme mostrado.
$ sudo apt install nginx [On Debian/Ubuntu] $ sudo yum install nginx [On CentOS/RHEL]
Em seguida, crie um arquivo de bloco de servidor chamado /etc/nginx/conf.d/loadbalancer.conf
(dê um nome de sua escolha).
$ sudo vi /etc/nginx/conf.d/loadbalancer.conf
Em seguida, copie e cole a seguinte configuração nele. Esta configuração é padrão para round-robin, pois nenhum método de balanceamento de carga é definido.
upstream backend { server 192.168.58.5; server 192.168.58.8; } server { listen 80 default_server; listen [::]:80 default_server; server_name tecmintapp.lan; location / { proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://backend; } }
Na configuração acima, a diretiva proxy_pass
(que deve ser especificada dentro de uma localização, /
neste caso) é usada para passar uma solicitação para os servidores HTTP proxy referenciados pela palavra backend, na diretiva upstream (usada para definir um grupo de servidores). Além disso, as solicitações serão distribuídas entre os servidores usando um mecanismo de balanceamento round-robin ponderado.
Para usar o mecanismo de menor conexão, use a seguinte configuração
upstream backend { least_conn; server 192.168.58.5; server 192.168.58.8; }
E para habilitar o mecanismo de persistência de sessão ip_hash
, use:
upstream backend { ip_hash; server 192.168.58.5; server 192.168.58.8; }
Você também pode influenciar a decisão de balanceamento de carga usando pesos do servidor. Usando a seguinte configuração, se houver seis solicitações dos clientes, o servidor de aplicativos 192.168.58.5 receberá 4 solicitações e 2 irão para 192.168.58.8.
upstream backend { server 192.168.58.5 weight=4; server 192.168.58.8; }
Salve o arquivo e saia. Em seguida, certifique-se de que a estrutura de configuração do Nginx está correta após adicionar as alterações recentes, executando o seguinte comando.
$ sudo nginx -t
Se a configuração estiver OK, reinicie e habilite o serviço do Nginx para aplicar as alterações.
$ sudo systemctl restart nginx $ sudo systemctl enable nginx
Testando o Balanceamento de Carga do Nginx no Linux
Para testar o balanceamento de carga do Nginx, abra um navegador da web e use o seguinte endereço para navegar.
http://tecmintapp.lan
Assim que a interface do site carregar, anote a instância da aplicação que carregou. Em seguida, atualize continuamente a página. Em algum momento, a aplicação deve ser carregada a partir do segundo servidor, indicando o balanceamento de carga.

Você acabou de aprender como configurar o Nginx como um balanceador de carga HTTP no Linux. Gostaríamos de saber sua opinião sobre este guia, e especialmente sobre o uso do Nginx como balanceador de carga, através do formulário de feedback abaixo. Para obter mais informações, consulte a documentação do Nginx sobre como usar o Nginx como um balanceador de carga HTTP.
Source:
https://www.tecmint.com/use-nginx-as-http-load-balancer-in-linux/