coldwa.st
Todos os guiasProgramaçãoWebDadosFerramentasBases de dadosHaskellConceitosCabal e buildsToolchainCompiladorDesempenhoEditor e HLS

Programação · Servidores · Redes

O que é um proxy reverso?

Por ColdwastAtualizado a 26 jun 20268 min de leitura#reverse-proxy#servers#networking
Cabos Ethernet ligados a um painel de switch de rede num data center
Um proxy reverso é a porta de entrada única para os seus servidores: cada pedido chega ao mesmo sítio, que depois o encaminha para o backend correto nos bastidores.

Assim que executa mais do que uma aplicação num servidor — um site, uma API, talvez alguns contentores — depara-se com um problema prático: os visitantes chegam todos às portas 80 e 443, mas cada aplicação escuta noutro sítio. Um proxy reverso é a resposta padrão. Este guia explica o que é um proxy reverso, em que difere do proxy que talvez já conheça e porque quase todos os ambientes de produção têm um.

A definição curta

Um proxy reverso é um servidor que fica à frente de um ou mais servidores backend, recebe cada pedido recebido do cliente e encaminha-o para o backend apropriado — e depois devolve a resposta desse backend ao cliente. Para o visitante, o proxy reverso é o site: só fala com ele e nunca vê os servidores por trás. A palavra «reverso» importa, e a secção seguinte explica porquê.

Proxy reverso vs proxy direto

Um proxy normal (direto) fica à frente dos clientes. Quando o seu navegador está configurado para usar um, os seus pedidos saem através do proxy em seu nome: ele age por quem faz os pedidos. Um proxy reverso é a imagem espelhada: fica à frente dos servidores e age em nome deles. Os clientes ligam-se a ele pensando que é o servidor real, e é ele que decide qual backend trata de facto cada pedido. A mesma ideia de intermediário, do lado oposto da conversa.

Servidores num rack de data center iluminados por luzes indicadoras azuis e vermelhas
Por trás de um único proxy reverso podem estar muitos servidores backend como estes. O proxy é a única máquina com que o público fala; encaminha cada pedido para o backend que o deve tratar.

Para que serve mesmo um proxy reverso

  • Encaminhamento por nome de host ou caminho: enviar api.example.com para a sua API e example.com para o seu site, mesmo que ambos corram na mesma máquina.
  • Terminação TLS: gerir os certificados HTTPS num só sítio para que cada backend fale HTTP simples internamente e você gira os certificados apenas uma vez.
  • Cache: guardar e servir diretamente as respostas frequentes, para não sobrecarregar o backend a cada pedido.
  • Buffer e proteção: absorver clientes lentos, aplicar limites e ocultar os endereços reais dos backends atrás de um único ponto de entrada público.

Na prática, o encaminhamento e o TLS já bastam para o justificar: permitem alojar várias aplicações de forma limpa num único VPS, com HTTPS, atrás de um único endereço.

Proxy reverso vs balanceador de carga

Estes conceitos sobrepõem-se, daí a confusão. Um balanceador de carga tem uma função concreta: distribuir o tráfego recebido por vários backends idênticos para que nenhum fique sobrecarregado. Um proxy reverso é o conceito mais amplo — encaminha pedidos e pode fazer muitas coisas (encaminhamento, TLS, cache), e distribuir a carga pelos backends é uma delas. Por isso, um balanceador de carga é, no fundo, um proxy reverso focado na tarefa de balanceamento. A maioria dos proxies reversos modernos também sabe balancear carga, enquanto um balanceador dedicado por vezes não faz muito mais.

As ferramentas comuns

Os proxies reversos mais usados são Nginx, Caddy, HAProxy e Traefik. O Nginx é a referência de longa data e é extremamente rápido a servir e a fazer de proxy. O Caddy é popular porque obtém e renova os certificados HTTPS automaticamente, quase sem configuração. O Traefik foi feito para ambientes de contentores e Kubernetes, onde descobre os serviços à medida que surgem e desaparecem. O HAProxy é preferido quando o balanceamento de carga de grande volume é a prioridade. Os fornecedores de cloud também oferecem proxies reversos e balanceadores geridos como serviço.

Um exemplo mínimo

Uma configuração de proxy reverso é sobretudo uma lista curta de regras. No Nginx, enviar os pedidos de um host para uma aplicação que corre localmente na porta 3000 fica assim:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
    }
}

É toda a ideia: os pedidos para example.com chegam ao Nginx na porta 80, e o Nginx encaminha-os para a sua aplicação na porta 3000, passando o host original. Acrescente um bloco TLS e um segundo server para a sua API, e uma só máquina serve várias aplicações por HTTPS de forma limpa.

Os compromissos honestos

Um proxy reverso acrescenta mais uma peça em movimento. Torna-se o ponto único por onde passa cada pedido, por isso se cair tudo o que está atrás fica inacessível — daí em produção ser executado de forma fiável e por vezes em duplicado. Acrescenta também alguma latência e mais um ficheiro de configuração para entender. Para uma só pequena aplicação que já escuta na porta 443, talvez não precise de um. Mas assim que aloja mais do que um serviço, quer gerir o HTTPS num só sítio ou planeia escalar, um proxy reverso compensa depressa.

Perguntas frequentes

O que é um proxy reverso em termos simples?

Um proxy reverso é um servidor que se coloca à frente dos seus servidores reais. Cada visitante liga-se a ele em vez de falar diretamente com as suas aplicações, e ele encaminha cada pedido para o backend correto e depois devolve a respetiva resposta. Para o visitante parece o próprio site, enquanto os servidores reais ficam ocultos por trás.

Qual é a diferença entre um proxy reverso e um proxy direto?

Um proxy direto fica à frente dos clientes e faz os pedidos em nome deles: representa quem navega. Um proxy reverso fica à frente dos servidores e representa-os: os clientes ligam-se a ele como se fosse o servidor real, e ele escolhe qual backend trata cada pedido. A mesma ideia de intermediário, mas nas extremidades opostas da ligação.

Um proxy reverso é o mesmo que um balanceador de carga?

Não exatamente. Um balanceador de carga distribui o tráfego por vários backends idênticos para partilhar a carga. Um proxy reverso é o conceito mais amplo que encaminha pedidos e também pode fazer encaminhamento, TLS e cache, e o balanceamento de carga é uma dessas coisas. Por isso um balanceador de carga é basicamente um proxy reverso focado na tarefa de balanceamento.

Preciso de um proxy reverso?

Precisa de um assim que aloja mais do que uma aplicação num servidor, quer gerir o HTTPS num só sítio ou planeia escalar por vários backends. Para uma só pequena aplicação que já serve HTTPS na sua própria porta, pode dispensá-lo. Assim que há encaminhamento, certificados ou vários serviços envolvidos, um proxy reverso deixa tudo muito mais limpo.

Guia independente, mantido pela comunidade. coldwa.st é um site de recursos de programação; este artigo é um texto explicativo original e inédito sobre proxies reversos. O excerto de Nginx é uma configuração padrão mostrada a título de ilustração; consulte a documentação do seu próprio proxy e versão para os detalhes.
Recomendado

Um servidor para correr o seu proxy reverso

Correr o Nginx ou o Caddy como proxy reverso à frente das suas aplicações exige um verdadeiro servidor Linux com controlo total — um VPS ou servidor cloud onde você é dono das portas 80 e 443. A Infomaniak — fornecedor suíço que respeita a privacidade — oferece VPS e servidores cloud onde pode instalar um proxy reverso e encaminhar o tráfego para tantos backends quantos quiser.

Ver Infomaniak Cloud →

Link de afiliado — ajuda a manter estes guias gratuitos.

Explore mais explicações claras no nosso índice de guias.