Pular para o conteúdo
Proxy Types 7 min de leitura 786 visualizações

Nginx como servidor proxy

Explore um guia completo para configurar o Nginx como servidor proxy. Entenda a instalação, os benefícios e o uso prático para melhorar o desempenho web.

Nginx como servidor proxy

O Nginx funciona como um servidor proxy de alto desempenho ao encaminhar de forma eficiente as requisições dos clientes para servidores backend e retornar suas respostas, viabilizando recursos como balanceamento de carga, terminação SSL e cache de conteúdo.

Introdução

O Nginx (Engine-X) é um servidor web de código aberto que também pode operar como proxy reverso, cache HTTP e balanceador de carga. Sua arquitetura orientada a eventos permite lidar com um grande número de conexões simultâneas de forma eficiente, o que o torna adequado para ambientes de alto tráfego. Como proxy, o Nginx fica entre os clientes e os servidores backend, mediando o tráfego e adicionando camadas de funcionalidade.

Por que usar o Nginx como proxy?

Implantar o Nginx como servidor proxy oferece várias vantagens operacionais:

  • Balanceamento de carga: distribui o tráfego de rede recebido entre múltiplos servidores backend para melhorar a responsividade e a confiabilidade da aplicação.
  • Terminação SSL/TLS: trata as conexões criptografadas vindas dos clientes, descriptografando o tráfego antes de encaminhá-lo aos servidores backend, que podem então operar em HTTP sem criptografia. Isso tira o processamento criptográfico dos servidores de aplicação.
  • Cache: armazena o conteúdo acessado com frequência, reduzindo a carga nos servidores backend e diminuindo o tempo de resposta para os clientes.
  • Segurança: atua como uma barreira, protegendo os servidores backend do acesso direto dos clientes e de possíveis ataques. Ele pode filtrar requisições e aplicar políticas de acesso.
  • Alta disponibilidade: em conjunto com o balanceamento de carga, o Nginx pode desviar o tráfego de servidores backend com problemas, garantindo serviço contínuo.
  • Gerenciamento de tráfego: permite reescrita de URL, filtragem de requisições e manipulação de conteúdo.

Tipos de proxy no Nginx

O Nginx opera principalmente em dois modos de proxy: proxy reverso e proxy direto (forward).

Proxy reverso

Um proxy reverso busca recursos em nome de um cliente a partir de um ou mais servidores. Esses recursos são então devolvidos ao cliente, como se tivessem se originado do próprio servidor proxy. Os clientes desconhecem a arquitetura do backend.

Proxy direto (forward)

Um proxy direto busca recursos em uma ampla variedade de servidores em nome de um cliente. Ele atua como intermediário para clientes que requisitam recursos de servidores externos. Os clientes são explicitamente configurados para usar o proxy direto.

Recurso Proxy reverso Proxy direto
Conhecimento do cliente O cliente desconhece o proxy; as requisições vão para o proxy. O cliente conhece o proxy e está configurado para usá-lo.
Finalidade Protege e otimiza os servidores backend; balanceamento de carga. Permite que clientes acessem recursos externos; segurança/filtragem.
Localização Normalmente implantado à frente dos servidores web. Normalmente implantado na borda da rede do cliente.
Transparência Aparece como o servidor de origem para o cliente. Aparece como intermediário para o cliente.

Configuração básica de proxy reverso

Configurar o Nginx como proxy reverso envolve definir um bloco server que escuta as requisições recebidas e depois usa a diretiva proxy_pass para encaminhá-las a um servidor upstream.

Pré-requisitos

  • Uma instância do Nginx instalada.
  • Acesso aos arquivos de configuração do Nginx (normalmente /etc/nginx/nginx.conf ou arquivos dentro de /etc/nginx/sites-available/).
  • Um servidor backend (por exemplo, um servidor de aplicação, outro servidor web) em execução e acessível a partir do servidor Nginx.

Principais diretivas de configuração

  • proxy_pass: a diretiva fundamental para encaminhar requisições. Especifica o protocolo, o endereço e a porta opcional do servidor proxiado.
  • proxy_set_header: modifica os cabeçalhos de requisição que o Nginx envia ao servidor proxiado. Essencial para repassar o IP do cliente, o host e as informações de protocolo.
  • proxy_buffering: controla se o Nginx faz buffer das respostas do servidor proxiado. O buffering pode melhorar o desempenho ao permitir que o Nginx receba a resposta inteira antes de enviá-la ao cliente.
  • proxy_cache: habilita o cache das respostas dos servidores proxiados.
# /etc/nginx/sites-available/my_reverse_proxy.conf

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        # O servidor backend de destino
        proxy_pass http://backend_app_server:8080;

        # Repassa o host e o IP originais para o backend
        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;

        # Desative o buffering do proxy para streaming, habilite para web tradicional
        # proxy_buffering on; 
    }

    # Opcional: servir arquivos estáticos diretamente pelo Nginx
    location /static/ {
        root /var/www/my_app;
        expires 30d;
    }
}

Depois de criar esse arquivo, ative-o criando um link simbólico para sites-enabled:
sudo ln -s /etc/nginx/sites-available/my_reverse_proxy.conf /etc/nginx/sites-enabled/
Em seguida, teste a configuração do Nginx e recarregue:
sudo nginx -t
sudo systemctl reload nginx

Configuração avançada de proxy reverso

Balanceamento de carga

O Nginx pode distribuir requisições entre múltiplos servidores backend usando diversos algoritmos de balanceamento de carga. O bloco upstream define um grupo de servidores.

# No nginx.conf ou em um arquivo separado incluído pelo bloco http

upstream backend_servers {
    # Round-robin (padrão)
    server backend_server1.example.com:8080;
    server backend_server2.example.com:8080;
    server 192.168.1.100:8080; # É possível usar endereços IP

    # Round-robin ponderado
    # server backend_server1.example.com:8080 weight=3;
    # server backend_server2.example.com:8080 weight=1;

    # Menor número de conexões
    # least_conn;

    # IP Hash (sessões fixas com base no IP do cliente)
    # ip_hash;

    # Health checks (requer Nginx Plus ou módulos específicos)
    # server backend_server1.example.com:8080 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    server_name myapp.example.com;

    location / {
        proxy_pass http://backend_servers; # Referencia o bloco upstream
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Terminação SSL/TLS

O Nginx pode encerrar conexões SSL/TLS, retirando o processo de criptografia/descriptografia dos servidores backend. Isso exige certificados e chaves SSL.

server {
    listen 443 ssl;
    server_name secure.example.com;

    ssl_certificate /etc/nginx/ssl/secure.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/secure.example.com.key;

    # Configurações SSL recomendadas para segurança e desempenho
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    location / {
        proxy_pass http://backend_app_server:8080; # O backend pode ser HTTP
        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; # Informa ao backend o protocolo original
    }
}

# Opcional: redirecionar HTTP para HTTPS
server {
    listen 80;
    server_name secure.example.com;
    return 301 https://$host$request_uri;
}

Cache

O Nginx pode armazenar em cache as respostas dos servidores proxiados, reduzindo significativamente a latência e a carga do backend para conteúdo estático ou que muda pouco.

# No bloco http (fora de qualquer bloco server)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_key "$scheme$request_method$host$request_uri";

server {
    listen 80;
    server_name cache.example.com;

    location / {
        proxy_pass http://backend_app_server:8080;
        proxy_set_header Host $host;

        proxy_cache my_cache; # Habilita o cache para este location
        proxy_cache_valid 200 302 10m; # Cacheia respostas 200/302 por 10 minutos
        proxy_cache_valid 404 1m;    # Cacheia respostas 404 por 1 minuto
        proxy_cache_bypass $http_pragma $http_authorization; # Não cacheia se esses cabeçalhos estiverem presentes
        proxy_no_cache $http_pragma $http_authorization; # Não usa o cache se esses cabeçalhos estiverem presentes

        add_header X-Proxy-Cache $upstream_cache_status; # Cabeçalho para ver o status do cache
    }
}

Proxy de WebSockets

Fazer proxy de WebSockets exige manipulação específica de cabeçalhos para tratar os cabeçalhos Upgrade e Connection na troca de protocolo.

server {
    listen 80;
    server_name websocket.example.com;

    location /ws/ {
        proxy_pass http://backend_websocket_server:8081;

        # Cabeçalhos específicos de WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400s; # Ajuste conforme necessário para conexões de longa duração
    }
}

Configuração básica de proxy direto

Configurar o Nginx como proxy direto permite que os clientes roteiem suas requisições de saída através do Nginx. Isso costuma ser usado em redes corporativas para controle de acesso ou registro de logs.

Diretivas de configuração

  • resolver: especifica os servidores DNS que o Nginx deve usar para resolver nomes de host.
  • proxy_pass: usada dentro de um bloco location, mas com uma variável para a URL de destino.
# No bloco http (fora de qualquer bloco server)
resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS público do Google, ajuste conforme necessário

server {
    listen 3128; # Porta comum para servidores proxy
    listen [::]:3128;

    # Restringe o acesso a clientes autorizados (por exemplo, rede interna)
    allow 192.168.1.0/24;
    deny all;

    location / {
        proxy_pass $scheme://$host$request_uri;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Desativa o cache para um proxy direto de uso geral
        proxy_no_cache 1;
        proxy_cache_bypass 1;
    }
}

Os clientes então configurariam seus navegadores ou aplicações para usar nginx_ip_address:3128 como proxy.

Monitoramento e resolução de problemas

A operação eficaz do Nginx como proxy exige recursos de monitoramento e diagnóstico.

  • Teste de configuração: sempre valide os arquivos de configuração antes de recarregar o Nginx.
    sudo nginx -t
  • Status do serviço: verifique o status do serviço Nginx.
    sudo systemctl status nginx
  • Logs de acesso: o Nginx registra cada requisição processada no log de acesso, normalmente em /var/log/nginx/access.log. Esses logs trazem detalhes como IP do cliente, método da requisição, URL, código de status e tamanho da resposta.
  • Logs de erro: erros críticos, avisos e informações de depuração são gravados no log de erros, geralmente em /var/log/nginx/error.log. Monitore esse arquivo para detectar problemas de configuração, de conectividade com o backend ou limitações de recursos.
  • Saúde do backend: garanta que os servidores backend estejam operacionais e acessíveis a partir do servidor Nginx. Use ferramentas como curl ou ping na máquina do Nginx para testar a conectividade.
  • Conectividade de rede: verifique os caminhos de rede entre clientes, Nginx e servidores backend.
  • Uso de recursos: monitore CPU, memória e I/O de disco no servidor Nginx para identificar gargalos.
Atualizado: 03.03.2026
Voltar à categoria

Experimente nossos proxies

20,000+ proxies em 100+ países do mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.