Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Guia Definitivo: Configurar Nginx como Proxy Reverso

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.

  1. Instalar o Nginx no Ubuntu 22.04 LTS
  2. Criar arquivo de configuração do virtual host
  3. Definir diretivas proxy_pass para backends
  4. Configurar headers de proxy adequados
  5. Testar e recarregar a configuração
  6. 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

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.

Conheça nossos servidores VPS otimizados

  • 0 Os usuários acharam isso útil
  • nginx, proxy-reverso, load-balancer, ubuntu, avirahost
Esta resposta foi útil?

Artigos Relacionados

Otimizar cache Redis para aplicações PHP no Ubuntu 22.04

Para otimizar o cache Redis para aplicações PHP no Ubuntu 22.04, instale e configure o Redis,...

Configurar Alertas Automáticos com Zabbix no Ubuntu

Para configurar alertas automáticos com Zabbix no Ubuntu, instale o Zabbix Server, configure...

Otimizar MySQL: como reduzir uso de memória e acelerar consultas

Otimizar MySQL é o processo de ajustar configurações e consultas para reduzir o consumo de...

Entenda o que é Swap no Linux: como funciona e quando usar

Swap no Linux é um espaço em disco usado como extensão da memória RAM quando esta se esgota. O...