Proxy Reverso com Apache

Muita gente enxerga o proxy apenas como um servidor que intermedia as requisições entre a rede local e a internet, fazendo cache de páginas e controle de acesso. Sem dúvidas, o serviço mais conhecido e utilizado para este fim é o Squid. O proxy tem outra característica/função, pouco conhecida mas muito útil: o proxy reverso.

[ Hits: 61.396 ]

Por: Natália Vaz Silva em 04/10/2011 | Blog: http://linuxnatyworking.wordpress.com


Configuração do proxy reverso



Além do proxy web, o Squid também pode se comportar como proxy reverso, mas neste artigo, teremos como base o Apache 2.2 para esta função.

As configurações apresentadas funcionam tanto no Windows quanto no Linux. Então, vamos colocar as mãos na massa...

No arquivo de configuração do Apache, vamos fazer as seguintes alterações:

NOTA: No Linux geralmente o httpd.conf está nos diretórios /etc/http/conf ou /usr/local/http/conf, dependendo da distro utilizada.

Habilitar os módulos do proxy. Para isso, descomente as linhas:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so

Incluir vhosts na configuração. Para isso acrescente ou descomente a linha abaixo:

Include conf/extra/httpd-vhosts.conf

NOTAS:
  • Os vhosts podem ser configurados no httpd.conf, optei pelo uso de um arquivo separado para organizar melhor o servidor.
  • Os vhosts não são necessários na configuração do proxy reverso. São utilizados quando há mais de um nome para o mesmo servidor, e cada nome será direcionado para uma aplicação diferente.

Incluir o arquivo de mod-proxy. Para isso acrescente ou descomente a linha abaixo:

Include conf/extra/mod_proxy.conf

Caso os dois arquivos citados acima não existam no servidor, os mesmos devem ser criados.

Para fazer o roteamento das requisições direcionadas aos servidores internos é utilizado o ProxyPass, a sintaxe é simples, basicamente temos a estrutura:

ProxyPass                /destino       http://servidor.da.app:porta/destino
ProxyPassReverse         /destino       http://servidor.da.app:porta/destino


Para trabalhar com vhosts, crie ou edite o arquivo conf/extra/httpd-vhosts.conf e crie os vhosts com as configurações a seguir.

NOTAS:
  • Sempre o contexto informado deve ser igual ao contexto da aplicação.
  • Todos os diretórios referenciados pela aplicação no servidor de hospedagem devem ser configurados no proxy, a não ser que eles sejam subdiretórios de algum que já tenha sido configurado.

<VirtualHost *:80>
    ServerName app1.xyz.com.br
    ErrorLog "logs/app1.xyz.com.br-error.log"
    CustomLog "logs/app1.xyz..com.br-access.log" common
    ProxyPass               /              http://app1.xyz.com.br:8040/
    ProxyPassReverse        /              http://app1.xyz.com.br:8040/

    ProxyPass              /contexto1      http://app1.xyz.com.br:8040/contexto1
    ProxyPassReverse       /contexto1      http://app1.xyz.com.br:8040/contexto1
</VirtualHost>

Para trabalhar somente com o roteamento das requisições, apontando as requisições recebidas para outros servidores da rede, crie ou edite o arquivo conf/extra/mod_proxy.conf e insira as linhas de acordo com as aplicações e servidores da sua rede:

    ProxyPass           /aplicacao      http://servidor.xyz.com.br:8040/aplicacao
    ProxyPassReverse    /aplicacao      http://servidor.xyz.com.br:8040/aplicacao

    ProxyPass           /teste          http://servidor2.xyz.com.br/teste
    ProxyPassReverse    /teste          http://servidor2.xyz.com.br/teste
    ProxyPass           /teste_qa       http://servidor2.xyz.com.br:8080/teste_qa
    ProxyPassReverse    /teste_qa       http://servidor2.xyz.com.br:8080/teste_qa

Sempre que uma alteração no apache for efetuada o mesmo deve ser reiniciado.

Artigo originalmente publicado no meu blog: Proxy reverso com Apache « Linux Natyworking

Página anterior    

Páginas do artigo
   1. Proxy web x proxy reverso
   2. Configuração do proxy reverso
Outros artigos deste autor

Instalação e configuração do Apache2 com SSL e MOD_JK no Solaris

Leitura recomendada

Instalação do CRUX 3.0 em Virtualbox

Restrição de acesso a diretórios pelo Apache

Configurando e instalando o Java com Tomcat no Linux

Implementando servidor LDAP no Ubuntu

Instalando o Lazarus no Slackware

  
Comentários
[1] Comentário enviado por perrywerneck em 04/10/2011 - 14:05h

Olá,

Se me permite algumas sugestões:

Nas versões mais recentes do apache não é preciso editar diretament o .conf, os módulos podem ser ativados com o comando a2enmod; no caso ficaria:

sudo a2enmod proxy_balancer
sudo a2enmod proxy_ftp
sudo a2enmod proxy_http
sudo a2enmod proxy_connect

Eu geralmente habilito só o proxy_http, proxy_ftp e o deflate para compactar as páginas de saída.

Quanto ao conf eu também não edito o original do apache, apenas crio um novo arquivo em /etc/apache2/conf.d

Usar arquivos separados é mais prático quando, por exemplo, você precisa distribuir para várias máquinas ou criar um pacote de instalação (.deb ou .rpm) já que evita a necessidade de "seds" direto nos .conf.

[2] Comentário enviado por nataliavaz em 04/10/2011 - 14:41h

Sugestões são sempre bem vindas perrywerneck. Obrigada.

Optei por editar o conf porque eram pequenas alterações, só habilitação de módulo e inclusão de outras configurações, e também sempre que altero um arquivo de configuração original faço um backup do mesmo. Na verdade ainda não precisei de criar um pacote instalação, por isso não me preocupei com esta questão, mas vou considerar.
A idéia era compartilhar mesmo, com certeza a partir desta surgirão outras observações e assim vamos evoluindo a solução.


[3] Comentário enviado por xerminador em 05/10/2011 - 11:40h

nataliavaz ,

Bacana que nao conhecia esta função que o proxy poderia exercer na rede.

So tenho uma duvida em questao de segurança, ele no caso pode esconde o restante da rede c om os redirecionamento proprios para cada servidor com seus respectivos serviços .

Eu vi algumas vantagens comparado com um firewall de borda mas o que mais se preocupamos na borda e com segurança.

Minha pergunta é

Esse Proxy reverso é seguro?

Esse Proxy pode trabalha em conjunto com um firewall?

E Qual a vantagem?

Quantas perguntas, rsrsrs

obrigado;

[4] Comentário enviado por nataliavaz em 05/10/2011 - 12:00h

Olá xerminator, até a pouco tempo também não sabia desta função do proxy e o Apache também faz muita coisa além de hospedar aplicações na rede.

Bom, vamos às dúvidas, não sou especialista no Apache, o que fiz foi compartilhar uma experiência que tive, mas suas perguntas creio que da pra responder.


1 - Esse Proxy reverso é seguro?
R: é seguro no sentido de ser a única interface na borda, eliminando a necessidade dos outros servidores internos estarem visíveis na internet. Ele não dispensa as outras ferramentas e rotinas de segurança da rede.

2 - Esse Proxy pode trabalha em conjunto com um firewall?
R: Como disse anteriormente, o Proxy não elimina o firewall, trabalha em conjunto com o mesmo. Ele só encaminha as requisições de fora pra dentro da rede, não controla acesso, pacotes...

3 - E Qual a vantagem? Citei algumas no artigo, mas vamos lá:
R: Deixa somente um servidor visível na internet;
Você só precisa de um dominio registrado.
Pode fazer cache de conteúdo estático diminuindo carga na rede;
Deixa somente um servidor preocupado em direcionar as requisições e cada servidor só se preocupa em responder às requisições para sua aplicação específica;

[5] Comentário enviado por dolivervl em 05/10/2011 - 12:21h

Eu escrevi a algum tempo atrás esse artigo aqui para o VOL http://www.vivaolinux.com.br/artigo/Proxy-reverso-com-Apache-+-cache-+-compactacao-+-estatisticas

Acho que algumas perguntas podem ser respondidas através dele.

Tenho 2 servidores em produção rodando com essas configurações e nunca tive problemas.

[6] Comentário enviado por nataliavaz em 05/10/2011 - 14:30h

Com certeza dolivervl !! Muito bom seu artigo, vou implementar algumas funcionalidades nos meus servidores aqui :)


Contribuir com comentário