Um proxy reverso protege os seus ser­vi­do­res públicos, atuando como in­ter­me­diá­rio: recebe os pedidos dos clientes, re­en­ca­mi­nha-os para os ser­vi­do­res backend e entrega a resposta ao uti­li­za­dor.

Como funciona um proxy inverso?

Em termos gerais, um servidor proxy funciona como uma interface de co­mu­ni­ca­ção na rede, que recebe pedidos e os re­en­ca­mi­nha em nome do cliente para um servidor de destino. O proxy inverso situa-se sempre entre os clientes (por exemplo, os na­ve­ga­do­res web) e os ser­vi­do­res backend (como ser­vi­do­res web, de bases de dados ou de apli­ca­ções). Sempre que é efetuada uma so­li­ci­ta­ção a partir do cliente, ele entra em ação e decide se deve re­en­ca­mi­nhá-la e para que servidor interno. Este processo decorre em quatro passos básicos:

  1. Recepção do pedido do cliente: o proxy inverso recebe pedidos HTTP, HTTPS ou outros pro­to­co­los, como FTP ou WebSocket.
  2. Análise do pedido: o proxy verifica se o pedido é válido, se re­pre­senta um risco de segurança e se existe uma versão ar­ma­ze­nada na cache.
  3. Re­en­ca­mi­nha­mento para o servidor adequado: quando não é possível responder a partir do cache, o proxy inverso envia a so­li­ci­ta­ção para um dos ser­vi­do­res internos.
  4. Resposta ao cliente: o proxy inverso recebe a resposta do servidor backend, processa-a se ne­ces­sá­rio (por exemplo, aplicando en­crip­ta­ção) e devolve-a ao cliente que a solicitou.
Imagem: Esquema de la arquitectura de un proxy inverso
El proxy inverso (reverse proxy) y el servidor web se en­cu­en­tran en una misma red interna.

Em que difere de um proxy de re­en­ca­mi­nha­mento?

Enquanto os proxies inversos, como já ex­pli­cá­mos, são colocados entre os clientes e os ser­vi­do­res backend, os proxies de re­en­ca­mi­nha­mento situam-se entre os clientes e a própria Internet. Um proxy de re­en­ca­mi­nha­mento canaliza todos os pedidos dos clientes e reenvia-os para os ser­vi­do­res de destino uti­li­zando o seu próprio endereço de remetente. Desta forma, as respostas dos ser­vi­do­res também chegam primeiro ao proxy, que depois as distribui aos dis­po­si­ti­vos clientes cor­res­pon­den­tes. Isto permite manter o anonimato dos uti­li­za­do­res, exceto no caso de um proxy trans­pa­rente. Em resumo: enquanto um proxy de re­en­ca­mi­nha­mento protege os clientes de uma rede interna contra ameaças externas, um proxy inverso protege os ser­vi­do­res numa rede pública e melhora a sua dis­po­ni­bi­li­dade.

Assim, os proxies inversos destacam-se por ofe­re­ce­rem vantagens claras para a in­fra­es­tru­tura de ser­vi­do­res, graças a fun­ci­o­na­li­da­des como o ba­lan­ce­a­mento de carga e a segurança avançada, enquanto os proxies de re­en­ca­mi­nha­mento se con­cen­tram na proteção e no anonimato dos clientes.

Imagem: Esquema de la arquitectura de un proxy de reenvío
A di­fe­ren­cia del proxy inverso (reverse proxy), el proxy de reenvío se encuentra en la misma red interna que los clientes.

Proxy inverso: casos de uti­li­za­ção

A cen­tra­li­za­ção dos pedidos dos clientes permite controlar com precisão o tráfego de entrada através de um proxy inverso. Graças a isso, é possível, entre outras coisas, dis­po­ni­bi­li­zar vários ser­vi­do­res sob o mesmo URL, dis­tri­buir os pedidos de forma equi­li­brada entre di­fe­ren­tes ser­vi­do­res e acelerar a entrega de dados através do cache. A seguir, apre­sen­ta­mos as prin­ci­pais áreas de aplicação de um servidor proxy inverso.

Equi­lí­brio de carga

Com um proxy inverso situado à frente dos ser­vi­do­res, é possível associar uma mesma URL a vários sistemas dentro da rede interna. Isto permite dis­tri­buir os pedidos recebidos por vários ser­vi­do­res. Este ba­lan­ce­a­mento de carga evita a so­bre­carga de um único sistema e funciona como medida de com­pen­sa­ção em caso de falha. Se um servidor deixar de estar dis­po­ní­vel devido a erros de hardware ou software, o módulo de ba­lan­ce­a­mento do proxy re­di­re­ci­ona au­to­ma­ti­ca­mente as so­li­ci­ta­ções para os ser­vi­do­res restantes. Desta forma, a dis­po­ni­bi­li­dade dos serviços do servidor é mantida mesmo em caso de falhas.

Caché

Para acelerar a ve­lo­ci­dade dos serviços do servidor, um proxy inverso pode in­cor­po­rar uma função de cache que permite armazenar tem­po­ra­ri­a­mente os conteúdos mais so­li­ci­ta­dos. Graças a este mecanismo, o proxy é capaz de responder por si próprio a pedidos repetidos, seja parcial ou to­tal­mente.

Os conteúdos estáticos, como imagens ou folhas de estilo em cascata (CSS), são ar­ma­ze­na­dos na cache do proxy, reduzindo assim a ne­ces­si­dade de recorrer ao servidor backend e me­lho­rando sig­ni­fi­ca­ti­va­mente os tempos de acesso aos serviços web. No entanto, no caso de conteúdos que mudam com frequên­cia, nem sempre é garantido que a cache do proxy contenha a versão mais recente, o que pode fazer com que os clientes recebam in­for­ma­ções de­sa­tu­a­li­za­das.

Medidas de proteção e segurança

Um proxy inverso funciona como uma espécie de escudo para os ser­vi­do­res backend e pode oferecer várias fun­ci­o­na­li­da­des de segurança:

  • Proteção contra DDoS: os proxies inversos podem detetar e bloquear tráfego suspeito ou in­vul­gar­mente elevado no contexto de ataques DDoS, antes que este chegue aos ser­vi­do­res backend.
  • Web Ap­pli­ca­tion Firewall (WAF): muitos proxies inversos incluem um WAF que permite filtrar pedidos ma­li­ci­o­sos, como injeções SQL ou cross-site scripting (XSS).
  • Listas de acesso permitido/negado (whi­te­lis­ting e blac­klis­ting de IP): o proxy pode, se ne­ces­sá­rio, bloquear de­ter­mi­na­dos endereços IP ou permitir apenas ligações a partir de redes au­to­ri­za­das.
  • Ocultação dos ser­vi­do­res backend: o proxy impede que os endereços IP internos dos ser­vi­do­res backend sejam visíveis pu­bli­ca­mente, o que dificulta possíveis ataques.

En­crip­tado

Para aliviar a carga dos ser­vi­do­res backend, os proxies inversos também podem ser uti­li­za­dos para a en­crip­ta­ção. Neste caso, o proxy de­sen­cripta o pedido SSL/TLS do cliente (por exemplo, uma ligação HTTPS), re­en­ca­mi­nha os dados já de­sen­crip­ta­dos para os ser­vi­do­res backend e envia a resposta novamente en­crip­tada ao cliente. A co­mu­ni­ca­ção interna pode ser realizada tanto de forma não en­crip­tada como en­crip­tada.

Ano­ni­mi­za­ção

Um proxy inverso também pode ser utilizado para ano­ni­mi­zar o tráfego, ocultando os endereços IP originais dos clientes ou subs­ti­tuindo-os pelos seus próprios endereços IP. Desta forma, protege-se a pri­va­ci­dade dos clientes, uma vez que os endereços IP reais não aparecem nos registos. Além disso, isto permite im­ple­men­tar o ba­lan­ce­a­mento de carga ge­o­grá­fico: os pedidos podem ser re­di­re­ci­o­na­dos para o servidor mais próximo, em função da lo­ca­li­za­ção ge­o­grá­fica do uti­li­za­dor ou da uti­li­za­dora.

Com­pres­são

Com o software adequado, um proxy inverso pode ser utilizado para a com­pres­são de dados de entrada e saída. Um programa muito popular para a com­pres­são de páginas web é o gzip, que é fre­quen­te­mente utilizado em com­bi­na­ção com os ser­vi­do­res web Apache ou NGINX.

Ir para o menu principal