Pular para o conteúdo
Guides 3 min de leitura 969 visualizações

Apache como proxy reverso

Domine o mod_proxy do Apache para montar um proxy reverso. Este guia cobre a configuração essencial, balanceamento de carga e boas práticas de segurança.

Apache como proxy reverso

O Apache pode funcionar como proxy reverso, encaminhando as requisições dos clientes para servidores de backend e devolvendo suas respostas, por meio do módulo mod_proxy e de seus submódulos relacionados.

Um proxy reverso atua como intermediário para as requisições dos clientes, direcionando-as a um ou mais servidores de backend internos. Ele apresenta uma interface unificada para a internet enquanto oculta a arquitetura interna da rede. Entre os benefícios estão segurança reforçada, balanceamento de carga, terminação SSL/TLS, cache e gerenciamento simplificado do backend.

Habilitando o mod_proxy

Para configurar o Apache como proxy reverso, o módulo principal mod_proxy e submódulos específicos precisam estar habilitados. Esses módulos fornecem suporte a diferentes protocolos e recursos.

Módulos essenciais:

  • mod_proxy: o módulo de proxy principal.
  • mod_proxy_http: para fazer proxy de tráfego HTTP e HTTPS.
  • mod_proxy_balancer: necessário para balanceamento de carga entre vários servidores de backend.
  • mod_proxy_wstunnel: para proxy de WebSocket.
  • mod_ssl: caso o Apache vá tratar a terminação SSL/TLS das conexões dos clientes.

Habilite os módulos com o comando a2enmod em sistemas baseados em Debian/Ubuntu, ou descomentando as diretivas LoadModule no httpd.conf em sistemas baseados em CentOS/RHEL:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod proxy_wstunnel
sudo a2enmod ssl
sudo systemctl restart apache2

Configuração básica de proxy reverso HTTP

As diretivas fundamentais de um proxy reverso são ProxyPass e ProxyPassReverse. A configuração normalmente fica dentro de um bloco <VirtualHost> ou diretamente no httpd.conf.

<VirtualHost *:80>
    ServerName yourdomain.com
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Require all granted
    </Proxy>

    # Encaminha todas as requisições de /app para um servidor de backend
    ProxyPass /app http://backend-app-server:8080/app
    ProxyPassReverse /app http://backend-app-server:8080/app

    # Encaminha todas as requisições do caminho raiz / para outro backend
    ProxyPass / http://backend-web-server:8000/
    ProxyPassReverse / http://backend-web-server:8000/

    # Para terminação SSL/TLS no Apache, encaminhando HTTP para o backend
    # RequestHeader set X-Forwarded-Proto "https"
</VirtualHost>

Diretivas principais

  • ProxyRequests Off: isso é crítico. Desativa a capacidade de proxy direto (forward proxy) do Apache, impedindo que ele atue como proxy aberto, o que representa um risco de segurança significativo. Em um proxy reverso, essa diretiva deve estar sempre definida como Off.
  • ProxyPreserveHost On: essa diretiva garante que o cabeçalho Host original da requisição do cliente seja repassado ao servidor de backend. Se estiver Off, o cabeçalho Host será definido com o hostname e a porta do servidor de backend.
  • ProxyPass [path] [url]: mapeia um caminho de URL local (path) para uma URL de backend (url). O Apache intercepta as requisições que correspondem a path e as encaminha para url.
    • Exemplo: ProxyPass /app http://backend-app-server:8080/app significa que uma requisição para http://yourdomain.com/app/page.html é encaminhada para http://backend-app-server:8080/app/page.html.
  • ProxyPassReverse [path] [url]: reescreve os cabeçalhos Location, Content-Location e URI nas respostas HTTP vindas do servidor de backend. Isso garante que redirecionamentos ou links gerados pelo backend apontem de volta para a URL pública do proxy, evitando que os clientes sejam expostos a URLs internas.
  • <Proxy *>: define o controle de acesso ao próprio proxy. Require all granted permite que todos os clientes usem o proxy. Para maior segurança, é possível liberar apenas endereços IP ou redes específicas.

Recursos avançados do mod_proxy

Balanceamento de carga

O mod_proxy_balancer permite distribuir as requisições recebidas entre vários servidores de backend, aumentando a disponibilidade e a escalabilidade.

<VirtualHost *:80>
    ServerName app.yourdomain.com
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy balancer://mycluster>
        BalancerMember http://backend1.internal:8080 route=1 loadfactor=10
        BalancerMember http://backend2.internal:8080 route=2 loadfactor=10
        # Opcional: ProxySet para configurações específicas do balanceador
        ProxySet lbmethod=byrequests stickysession=JSESSIONID nofailover=Off
        # Para afinidade de sessão, o backend precisa definir um cookie como JSESSIONID
    </Proxy>

    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

    <Location "/balancer-manager">
        SetHandler balancer-manager
        Require ip 192.168.1.0/24 # Restringe o acesso à rede interna
    </Location>
</VirtualHost>
Atualizado: 04.03.2026
Voltar à categoria

Leia também

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.