10 min de leitura · Guia técnico
Para configurar o Nginx como proxy reverso, instale o Nginx, crie um arquivo de configuração de virtual host, defina diretivas proxy_pass, e teste a configuração. Este processo melhora a distribuição de requisições entre servidores backend.
- Instalar o Nginx no Ubuntu 22.04 LTS
- Criar arquivo de configuração do virtual host
- Definir diretivas proxy_pass para backends
- Configurar headers de proxy adequados
- Testar e recarregar a configuração
- Verificar logs e funcionamento
Pré-requisitos
- Servidor Ubuntu 22.04 LTS com acesso root ou sudo
- Nginx 1.24 ou superior instalado
- Pelo menos um servidor backend funcionando
- Conhecimento básico de edição de arquivos no Linux
- Firewall configurado para permitir tráfego HTTP/HTTPS
Instalação e configuração inicial do Nginx
O primeiro passo para configurar Nginx como proxy reverso é garantir que ele esteja instalado e funcionando corretamente no seu servidor. O Nginx oferece melhor performance que o Apache para esta função devido à sua arquitetura assíncrona.
Atualize os repositórios e instale o Nginx:
sudo apt update
sudo apt install nginx -y
Verifique se o serviço está ativo:
sudo systemctl status nginx
Output esperado:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running)
Habilite o Nginx para iniciar automaticamente:
sudo systemctl enable nginx
Criando configuração de proxy reverso básica
A configuração do proxy reverso no Nginx é feita através de blocos server que definem como as requisições são processadas e encaminhadas. Cada virtual host pode ter suas próprias regras de proxy.
Crie um novo arquivo de configuração:
sudo nano /etc/nginx/sites-available/proxy-reverso
Adicione a configuração básica:
server {
listen 80;
server_name exemplo.com www.exemplo.com;
location / {
proxy_pass http://192.168.1.100:8080;
proxy_set_header Host $host;
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;
}
}
Ative a configuração criando um link simbólico:
sudo ln -s /etc/nginx/sites-available/proxy-reverso /etc/nginx/sites-enabled/
Teste a configuração antes de aplicar:
sudo nginx -t
Output esperado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Configuração avançada com balanceamento de carga
Para ambientes de produção, o balanceamento de carga entre múltiplos servidores backend é essencial para garantir alta disponibilidade e distribuição adequada do tráfego.
Edite o arquivo de configuração para incluir upstream:
sudo nano /etc/nginx/sites-available/proxy-reverso
Adicione a configuração com balanceamento:
upstream backend_servers {
server 192.168.1.100:8080 weight=3;
server 192.168.1.101:8080 weight=2;
server 192.168.1.102:8080 backup;
}
server {
listen 80;
server_name exemplo.com www.exemplo.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
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;
# Configurações de timeout
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
}
Recarregue a configuração:
sudo systemctl reload nginx
Implementando SSL/HTTPS no proxy reverso
A terminação SSL no proxy reverso centraliza o gerenciamento de certificados e reduz a carga de processamento nos servidores backend. Esta configuração é fundamental para sites em produção.
Primeiro, obtenha um certificado SSL. Para este exemplo, usaremos Let's Encrypt:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d exemplo.com -d www.exemplo.com
Após obter o certificado, edite a configuração para incluir HTTPS:
upstream backend_servers {
server 192.168.1.100:8080 weight=3;
server 192.168.1.101:8080 weight=2;
server 192.168.1.102:8080 backup;
}
server {
listen 80;
server_name exemplo.com www.exemplo.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name exemplo.com www.exemplo.com;
ssl_certificate /etc/letsencrypt/live/exemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemplo.com/privkey.pem;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
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 https;
proxy_set_header X-Forwarded-Port 443;
}
}
Otimização e cache para melhor performance
A implementação de cache no proxy reverso pode reduzir significativamente a carga nos servidores backend e melhorar o tempo de resposta para os usuários finais.
Configure o cache adicionando estas diretivas ao bloco http em /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
Adicione dentro do bloco http:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g
inactive=60m use_temp_path=off;
Crie o diretório de cache:
sudo mkdir -p /var/cache/nginx
sudo chown www-data:www-data /var/cache/nginx
Atualize a configuração do virtual host para usar cache:
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_pass http://backend_servers;
proxy_set_header Host $host;
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;
add_header X-Cache-Status $upstream_cache_status;
}
Problemas comuns e como resolver
Erro 502 Bad Gateway
Causa: O servidor backend não está respondendo ou está inacessível.
Solução: Verifique se o serviço backend está rodando com sudo systemctl status nome-do-servico e confirme se o IP e porta estão corretos na configuração do Nginx. Verifique também os logs com sudo tail -f /var/log/nginx/error.log.
Headers não sendo repassados corretamente
Causa: Configuração inadequada dos headers proxy_set_header.
Solução: Certifique-se de incluir todos os headers necessários, especialmente X-Forwarded-For e X-Real-IP. Para aplicações que dependem do IP real do cliente, adicione proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
Timeout em requisições longas
Causa: Valores de timeout muito baixos para operações que demoram mais tempo.
Solução: Aumente os valores de timeout adicionando proxy_read_timeout 300s;, proxy_connect_timeout 300s; e proxy_send_timeout 300s; na configuração do location.
Cache não funcionando adequadamente
Causa: Configuração incorreta do cache ou headers que impedem o cache.
Solução: Verifique se o diretório de cache tem as permissões corretas e se não há headers Cache-Control: no-cache sendo enviados pelos backends. Use add_header X-Cache-Status $upstream_cache_status; para debugar.
Perguntas frequentes sobre configurar Nginx como proxy reverso
O que é um proxy reverso no Nginx?
Um proxy reverso no Nginx é um servidor intermediário que recebe requisições de clientes e as encaminha para servidores backend apropriados. Ele atua como um balanceador de carga, distribuindo o tráfego entre múltiplos servidores para melhorar performance e disponibilidade.
Qual a diferença entre proxy reverso e proxy tradicional?
O proxy tradicional atua em nome do cliente, ocultando sua identidade do servidor. Já o proxy reverso atua em nome do servidor, recebendo requisições dos clientes e distribuindo para servidores backend. O cliente não sabe que está se comunicando com um proxy reverso.
Nginx ou Apache é melhor para proxy reverso?
Nginx é superior ao Apache para proxy reverso devido à sua arquitetura assíncrona e menor consumo de memória. Nginx pode lidar com milhares de conexões simultâneas usando poucos recursos, enquanto Apache consome mais RAM por conexão ativa.
Como verificar se o proxy reverso está funcionando?
Você pode verificar através dos logs do Nginx em /var/log/nginx/access.log, testando requisições com curl -I para ver os headers de resposta, ou usando ferramentas como nginx -t para validar a configuração antes de aplicar.
Posso usar proxy reverso com SSL/HTTPS?
Sim, o Nginx suporta terminação SSL no proxy reverso, onde ele descriptografa o tráfego HTTPS dos clientes e pode se comunicar com backends via HTTP ou HTTPS. Isso centraliza o gerenciamento de certificados e reduz a carga de processamento nos servidores backend.
Conclusão
- Configure sempre headers adequados para preservar informações do cliente original nos servidores backend
- Implemente balanceamento de carga e servidores backup para garantir alta disponibilidade
- Use cache inteligente para reduzir carga nos backends e melhorar performance geral
Leia também
- Otimizar cache Redis para aplicações PHP no Ubuntu 22.04
- Configurar Alertas Automáticos com Zabbix no Ubuntu
- Entenda o que é Swap no Linux: como funciona e quando usar
Precisa de ajuda com configuração de proxy reverso?
Nossa equipe especializada pode auxiliar na implementação e otimização do seu ambiente de proxy reverso. Oferecemos suporte completo para configurações avançadas e troubleshooting.