O que é um proxy reverso? Um guia claro para programadores

  • VersionDude
  • Ferramentas
  • 6 min de leitura

Um proxy reverso fica à frente dos teus servidores e trata primeiro cada pedido recebido — encaminhamento, HTTPS, cache e proteção num só lugar. O que faz, em que difere de um proxy direto e as ferramentas para pôr um a funcionar.

Um proxy reverso é um servidor que fica à frente de um ou mais servidores back-end e trata cada pedido recebido antes deles. O cliente — um navegador ou uma aplicação — só comunica com o proxy; é o proxy que decide qual back-end deve responder, encaminha o pedido e devolve a resposta. Visto de fora, parece um único servidor, mesmo quando vários trabalham por detrás.

Proxy inverso vs proxy direto

Cabos Ethernet azuis ligados a um switch de rede — a camada de encaminhamento à frente da qual fica um proxy reverso.
Cabos Ethernet azuis ligados a um switch de rede — a camada de encaminhamento à frente da qual fica um proxy reverso.

O nome faz mais sentido ao lado do seu oposto. Um proxy direto fica à frente dos clientes e fala com a internet em nome deles, escondendo quem está a fazer o pedido — o modelo por trás dos filtros web empresariais e de muitas VPN. Um proxy reverso faz exatamente o contrário: fica à frente dos servidores e volta-se para os clientes, escondendo o back-end. A mesma ideia de intermediário, mas do outro lado da conversa.

O que um proxy inverso realmente faz

A sua primeira função é o encaminhamento. Um único domínio público e um único endereço IP podem servir de fachada a muitas aplicações diferentes: os pedidos para /api vão para um serviço, /blog para outro e tudo o resto para um terceiro, sem que o visitante alguma vez veja as portas ou as máquinas por baixo. É esse ponto de entrada único que te permite executar uma dúzia de pequenos serviços e ainda assim apresentar ao mundo um só endereço limpo.

  • Um só domínio à frente de várias aplicações ou microsserviços
  • HTTPS / terminação TLS automática (Caddy, Nginx)
  • Balanceamento de carga entre back-ends idênticos
  • Cache e compressão para aliviar o back-end
  • Limitação de taxa, WAF e ocultação dos servidores back-end

Para além do encaminhamento, o proxy reverso é onde o trabalho transversal é feito uma única vez em vez de em cada aplicação. Termina TLS, por isso os certificados HTTPS ficam num só lugar em vez de dentro de cada serviço. Pode distribuir a carga por vários back-ends idênticos, colocar em cache as respostas comuns para não solicitar duas vezes o back-end pela mesma coisa e comprimir as respostas para poupar largura de banda — tudo de forma transparente para as aplicações por detrás dele.

Uma fronteira de segurança natural

É também uma fronteira de segurança natural. Como os back-ends nunca ficam expostos diretamente à internet, os seus endereços reais e a sua pilha de software permanecem ocultos, reduzindo aquilo que um atacante consegue ver. O proxy passa a ser o único lugar onde se aplicam limites de taxa, se bloqueia tráfego abusivo, se acopla um firewall de aplicações web (WAF) ou se corta um cliente com mau comportamento — controlos que de outra forma terias de acrescentar separadamente a cada serviço.

As ferramentas que executam proxies inversos

Um punhado de ferramentas domina este espaço. Nginx e HAProxy são as escolhas consagradas e bem testadas; Caddy é popular para obter HTTPS automático com quase nenhuma configuração; e Traefik foi feito para ambientes com contentores e Kubernetes, onde os back-ends aparecem e desaparecem. O Apache também consegue fazê-lo com mod_proxy, e as opções geridas — balanceadores de carga na cloud, ou um serviço como a Cloudflare — são no fundo proxies reversos que outra pessoa gere por ti.

Configurações comuns de proxy inverso

Na prática, deparas-te com um proxy reverso sempre que um servidor tem de fazer mais do que uma coisa. Montagens comuns incluem servir vários sites a partir de uma única máquina, pôr HTTPS à frente de uma aplicação que só fala HTTP simples, expor microsserviços internos sob um único domínio arrumado, ou espalhar o tráfego por algumas cópias de uma aplicação para mais resiliência. Quem faz self-hosting apoia-se nele constantemente para executar muitas ferramentas atrás de um só endereço.

Proxy inverso vs balanceador de carga vs API gateway

Ajuda situar o proxy reverso face aos seus vizinhos. Um balanceador de carga é, na verdade, apenas uma das funções que um proxy reverso pode oferecer: distribuir os pedidos pelos back-ends. Um API gateway é um proxy reverso especializado para APIs, que acrescenta por cima autenticação, limitação de taxa e modelação de pedidos. Os termos sobrepõem-se porque são todos variações da mesma ideia — uma porta de entrada inteligente à frente dos teus serviços.

Ajuda situar o proxy reverso face aos seus vizinhos. Um balanceador de carga é, na verdade, apenas uma das funções que um proxy reverso pode oferecer: distribuir os pedidos pelos back-ends. Um API gateway é um proxy reverso especializado para APIs, que acrescenta por cima autenticação, limitação de taxa e modelação de pedidos. Os termos sobrepõem-se porque são todos variações da mesma ideia — uma porta de entrada inteligente à frente dos teus serviços.

— VersionDude

Deve gerir um você mesmo?

Então, deverias gerir um tu próprio? Se fazes self-hosting de mais do que um único serviço, queres tratar o HTTPS de forma limpa, ou precisas de um só endereço à frente de várias aplicações, um proxy reverso como o Nginx ou o Caddy é a resposta padrão — e precisa de um servidor que controles para funcionar. É uma peça de infraestrutura pequena e estável que faz muito em silêncio, e é exatamente por isso que quase toda a stack de produção tem um.

FAQ

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

Um proxy direto fica à frente dos clientes e faz pedidos à internet em nome deles, ocultando quem está a perguntar. Um proxy inverso é a imagem espelhada: fica à frente dos servidores, virado para os clientes, e oculta o back-end. O mesmo papel de intermediário, mas no lado oposto da conversa.

Um proxy inverso é a mesma coisa que um balanceador de carga?

Não exatamente. O balanceamento de carga — distribuir os pedidos por vários back-ends — é apenas uma das tarefas que um proxy inverso consegue fazer. Um proxy inverso também trata do encaminhamento, da terminação TLS, da cache e da segurança, por isso um balanceador de carga é, na verdade, apenas uma das funções do papel mais amplo do proxy inverso.

Que software se usa para executar um proxy inverso?

As escolhas mais comuns são o Nginx e o HAProxy (consolidados e testados há muito tempo), o Caddy (popular pelo HTTPS automático) e o Traefik (feito para contentores e Kubernetes). O Apache também o consegue fazer com mod_proxy, e as opções geridas, como os balanceadores de carga na cloud ou a Cloudflare, são proxies inversos que outra pessoa executa por ti.

Preciso de um proxy inverso?

Se alojas por conta própria mais do que um serviço, queres gerir o HTTPS de forma limpa num único sítio, ou precisas de um único endereço à frente de várias aplicações, um proxy inverso como o Nginx ou o Caddy é a resposta padrão. Para uma única aplicação simples é opcional, mas quase todos os ambientes de produção usam um.

Projeto relacionado