NGINX é um servidor web versátil e de alto desempenho amplamente utilizado como servidor proxy reverso. Um proxy reverso é um intermediário para solicitações de clientes, distribuindo-as para um ou mais servidores backend. Essa configuração beneficia o balanceamento de carga, melhorando a segurança e fornecendo alta disponibilidade. Usar o NGINX como proxy reverso pode melhorar a escalabilidade e a confiabilidade de seus serviços da web.
Este guia demonstrará como criar um proxy reverso no NGINX e cobrirá as etapas de configuração necessárias para rotear solicitações de clientes para servidores backend com eficiência.
Crie e configure um proxy reverso no Nginx
Configurando um proxy reverso básico no Nginx
Primeiro, para começar a configurar o Nginx como proxy reverso, acesse o arquivo de configuração do Nginx. Normalmente, esse arquivo está localizado em /etc/nginx/nginx.conf. Abra-o com seu editor de texto preferido, como usando sudo Nano:
sudo nano /etc/nginx/nginx.conf
Dentro do arquivo de configuração, concentre-se no bloco http. Aqui, você inserirá um bloco de servidor, a base da configuração do seu proxy reverso. O bloco do servidor escuta em uma porta especificada, geralmente a porta 80, o tráfego HTTP. Dentro deste bloco, a localização/diretiva informa ao Nginx como lidar com as solicitações recebidas. Use a diretiva proxy_pass para redirecionar essas solicitações para o servidor backend, especificado por seu endereço IP ou nome de host.
Por exemplo, a configuração pode ser assim:
http {
...
server {
listen 80;
location / {
proxy_pass http://backendserver_address;
}
}
}
Lembre-se de substituir backendserver_address pelo endereço real do seu servidor backend. Esta configuração simples diz ao Nginx para encaminhar todas as solicitações HTTP recebidas para o servidor backend especificado.
Configuração avançada de proxy reverso no Nginx
Em uma configuração mais avançada, talvez você queira configurar aspectos adicionais do proxy reverso. Isso pode incluir configurações para balanceamento de carga, terminação SSL ou armazenamento em cache.
Implementando balanceamento de carga
Se você estiver operando vários servidores back-end, o Nginx poderá distribuir o tráfego de entrada entre eles, melhorando o desempenho e a confiabilidade. Para balanceamento de carga, você modificaria a diretiva proxy_pass para apontar para um grupo de servidores definido em um bloco upstream. Por exemplo:
http {
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
}
Esta configuração permite que o Nginx equilibre a carga entre backend1.example.com e backend2.example.com.
Configurando a terminação SSL
Para terminação SSL, certifique-se de que o bloco do servidor escute na porta 443 e inclua o certificado SSL e os locais dos arquivos-chave. A configuração pode ser semelhante a:
server {
listen 443 ssl;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://backendserver_address;
}
}
Esta configuração permite que o Nginx lide com conexões SSL e descriptografe solicitações antes de passá-las para servidores back-end.
Finalizando Mudanças
Depois de configurar o Nginx, teste a configuração em busca de erros de sintaxe com:
nginx -t
Se o teste for aprovado, recarregue o Nginx para aplicar as alterações usando:
sudo systemctl reload nginx
Esta etapa garante que suas alterações tenham efeito sem interromper as conexões atuais.
Aprendizagem adicional: configurando valores de cabeçalho de proxy Nginx
Ao configurar o Nginx como proxy reverso, é importante definir corretamente os valores do cabeçalho do proxy. Esses cabeçalhos são cruciais para transmitir os detalhes originais da solicitação do cliente aos servidores back-end. Essas informações podem incluir o endereço IP do cliente, o protocolo original da solicitação e muito mais. A configuração adequada desses cabeçalhos garante que os servidores back-end tenham o contexto necessário para responder adequadamente às solicitações.
Compreendendo os cabeçalhos de proxy
Os cabeçalhos de proxy são essenciais em uma configuração de proxy reverso, pois carregam informações sobre a solicitação original do cliente. Essas informações são necessárias para que os servidores back-end tomem decisões informadas sobre como lidar com as solicitações recebidas. Por exemplo, conhecer o endereço IP original do cliente pode ser importante para fins de registro, análise ou segurança.
Configurações comuns de cabeçalho de proxy
Alguns dos cabeçalhos de proxy comuns que você pode configurar no Nginx incluem:
X-Real-IP
: este cabeçalho é usado para passar o endereço IP do cliente original para o servidor back-end.X-Forwarded-For
: Igual aX-Real-IP
, esse cabeçalho carrega uma lista de todos os servidores pelos quais a solicitação passou, incluindo o IP do cliente.X-Forwarded-Proto
: Este cabeçalho indica o protocolo (HTTP ou HTTPS) utilizado na solicitação original do cliente.
Implementando configurações de cabeçalho de proxy no Nginx
Para definir esses cabeçalhos na configuração do Nginx, você deve modificar o bloco location dentro do bloco server. Aqui está um exemplo de como você pode definir esses cabeçalhos:
server {
listen 80;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://backendserver_address;
}
}
Nesta configuração, $remote_addr e $scheme são variáveis que o Nginx preenche automaticamente com o endereço IP do cliente e o esquema da solicitação (HTTP ou HTTPS), respectivamente.
Melhores práticas para cabeçalhos de proxy
Ao configurar cabeçalhos de proxy, é importante considerar a segurança e a precisão das informações encaminhadas. Para evitar possíveis falsificações, certifique-se de que seus servidores back-end estejam configurados para confiar nesses cabeçalhos somente quando eles vierem de seu proxy reverso Nginx.
Conclusão
Ao configurar com êxito o NGINX como um proxy reverso, você pode otimizar sua infraestrutura da Web para obter melhor desempenho, segurança e escalabilidade. Monitore e ajuste regularmente sua configuração para garantir distribuição de carga e tempos de resposta ideais. A implementação de um proxy reverso com NGINX fornece uma solução robusta para gerenciar solicitações de clientes e manter alta disponibilidade para seus serviços web.