Como montar um proxy reverse no servidor Apache

Proxy reverse é uma espécie de cluster de máquinas, onde um servidor central utiliza recursos de outros servidores web de sua rede interna. Com um proxy reverse você pode misturar num único site, recursos do Apache em servidor Linux, IIS em Windows 2k, Java em Jakarta Tomcat, etc.

[ Hits: 142.763 ]

Por: Fabiano S. Ricardo em 07/01/2004


Configurando o proxy reverse para acessar outras máquinas



Após tudo estar funcionando, vá para o diretório do Apache e edite o arquivo de configurações:

# cd /usr/local/apache/conf
# vi httpd.conf


Nele, verifique se as seguintes configurações foram bem sucedidas na instalação:

LoadModule rewrite_module     libexec/mod_rewrite.so
LoadModule php4_module        libexec/libphp4.so  -> esse é apenas para o PHP
LoadModule proxy_module       libexec/libproxy.so

AddModule mod_proxy.c
AddModule mod_rewrite.c

Esses caras são os responsáveis pelo funcionamento do Proxy Reverse. Caso esses não estejam declarados, reveja a compilação do seu Apache.

Agora vamos para o que interessa realmente, procure a linha <IfModule mod_proxy.c>, iremos trabalhar com ela agora:

<IfModule mod_proxy.c>
    ProxyRequests Off   -> deixe essa linha como Off, já tive problema com ela
    ProxyPass /serv1/ http://192.168.0.22:80/serv1/
    ProxyPassReverse /serv1/ http://192.168.0.22:80/serv1/
   <Directory /usr/local/apache/htdocs/serv1>
       Order Allow,deny
       Allow from all
   </Directory>
    Redirect Permanent /serv1 https://www.empresa.com.br/serv1/

Nessa primeira passagem está acontecendo o seguinte:

O que se refere a ProxyPass /serv1, significa que quando alguém digitar www.empresa.com.br/serv1 ele irá solicitar o serviço em http://192.168.0.22:80/serv1/ ou seja, o serviço solicitado roda na porta 80 do primeiro servidor na rede interna.

Um detalhe importante é que a primeira solicitação que é o serv1 digitado no www.empresa.com.br tem que ser idêntica a entrada do servidor da rede interna, ou seja, no primeiro caso é um IIS que está rodando no 192.168.0.22, então no diretório de serviços dele a pasta onde se encontra as páginas ASP tem que se chamar serv1 (nesse exemplo é claro).

Uma vez encontrado, o ProxyPassReverse devolve a solicitação e quem vai postar a tela é o Apache, sendo que ele não precisa ter suporte a ASP, pois quem está processando páginas ASP é o Windows 2000. Isso forma um cluster, as duas máquinas estão processando as informações e deixando o serviço bem mais rápido.

A diretiva <Directory /usr/local/apache/htdocs/serv1> tem que existir, pois o Apache está fazendo de conta que é ele quem é dono do serviço. então você tem que ter criada uma pasta chamada serv1 no seu htdocs do Apache.

No Redirect Permanent estou forçando para que a navegação do servidor Windows 2000 Server utilize a criptografia de SSL criada no Apache, ou seja o Windows 2000 não tem criptografia, então o Apache fornece o serviço de criptografia.

Continuando dentro da tag <IfModule mod_proxy.c>, vamos ao exemplo de configuração para o segundo servidor:

    ProxyPass /clijava/ http://192.168.0.20/clijava/
    ProxyPassReverse /clijava/ http://192.168.0.20/clijava/
    AllowCONNECT 443
   <Directory /usr/local/apache/htdocs/clijava>
       Order Allow,deny
       Allow from all
   </Directory>
  Redirect Permanent /clijava https://www.empresa.com.br/clijava/
</IfModule>

Essa outra diretiva está acionando o outro Windows 20000, o que roda o Jakarta TomCat. O procedimento é quase idêntico ao que expliquei acima, sendo que nesse caso o AllowCONNECT 443 é utilizado porque além da criptografia do Apache, o Jakarta também está criptografado, então nesse caso os dois servidores estão conversando em criptografia.

Em todo o caso o Jakarta não precisaria estar criptografado, mas fiz uns testes com ele e percebi que se os dois estiverem criptografado, tenho que usar essa diretiva.

E por fim:

ProxyVia On

<IfModule mod_disk_cache.c>
    CacheRoot "/usr/local/apache/proxy"
    CacheSize 5
    CacheGcInterval 4
    CacheMaxExpire 24
    CacheLastModifiedFactor 0.1
    CacheDefaultExpire 1
</IfModule>

Isso serve para a troca de cache e é extremamente importante, dependendo de quantas requisições seu servidor interno tiver, você tem que alterar esse números ai. Caso queira saber mais a fundo consulte a documentação do Apache.

Finalmente, pronto!

Aqui termino minha publicação do artigo e espero que isso possa ajudar alguém como tem me ajudado até hoje. Caso alguém tenha alguma dúvida, estarei a disposição para poder exclarecê-las.

Abraço a todos! 30/12/2003

Página anterior    

Páginas do artigo
   1. O que vem a ser um proxy reverse
   2. Configurando o Apache para o funcionamento do proxy
   3. Configurando o proxy reverse para acessar outras máquinas
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Apache 2 + mod_perl 2.0.1

Criando sites com o Zope

Qualidade de Serviços para Gateways Linux (QoS)

Alinhamento em folhas de estilo - CSS

Laconica - Twitter? Open source? Sim! Eis nosso microbloging de código aberto

  
Comentários
[1] Comentário enviado por fabio em 07/01/2004 - 01:59h

Babei com esse recurso do Apache, muito bom mesmo! Agora me pintou uma dúvida, a diretiva de proxy reverse aqui está declarada relacionada com o documento raiz de um site, mas e se eu tiver vários domínios no servidor separados por VirtualHosts e agora quero fazer com que determinado site fique hospedado num servidor interno. Posso declarar o <IfModule...> dentro de uma entrada <VirtualHost>? Entendeu a pergunta? Vou pesquisar isso, qualquer coisa me dê um toque.

[]'s

[2] Comentário enviado por msmaximo em 08/01/2004 - 09:47h

Parabéns Fabiano pelo artigo. Esta muito bem explicado.
Ele será muito útil aonde trabalho.
Um abraço.

[3] Comentário enviado por raptor_mogi em 08/01/2004 - 16:33h

Obrigado pessoal, espero poder contribuir com mais artigos interessantes!

[4] Comentário enviado por lryal em 11/04/2004 - 11:30h

Oi Fabiano,
Excelente artigo. Muito bem escrito.
Bom, se você tiver alguma dica sobre alta disponibilidade de servidores, isto é, algum artigo que possa ajudar-me sobre configuração de VRRP, round robin, ou qualquer outro método de alta disponibilidade agradeço muito.
A minha idéia é ter 2 servidores de proxy reverso e se um falhar o outro assume.
O meu objetivo não é utilização profissional e sim educacional. Se você quiser mais informações sobre o meu objetivo posso enviar um email explicando mais detalhes.
Agradeço muito se voce puder ajudar-me.
Abcs,
Luis Roberto

[5] Comentário enviado por lryal em 11/04/2004 - 11:33h

Oi Fabiano,
Excelente artigo. Muito bem escrito.
Bom, se você tiver alguma dica sobre alta disponibilidade de servidores, isto é, algum artigo que possa ajudar-me sobre configuração de VRRP, round robin, ou qualquer outro método de alta disponibilidade agradeço muito.
A minha idéia é ter 2 servidores de proxy reverso e se um falhar o outro assume.
O meu objetivo não é utilização profissional e sim educacional. Se você quiser mais informações sobre o meu objetivo posso enviar um email explicando mais detalhes.
Agradeço muito se voce puder ajudar-me.
Abcs,
Luis Roberto

[6] Comentário enviado por ambn em 23/04/2004 - 16:15h

x

[7] Comentário enviado por ambn em 23/04/2004 - 16:18h

Ola Fabiano,
Gostei muito do seu artigo. Segui a receita de bolo e funcionou quase 100% do que eu precisava.
O problema é que quando o cliente tenta acessar o servidor, ele é redirecionado para o endereço ip do servidor original, ou seja, aquele que tem a aplicação a ser acessada, porém local (da rede do cliente) e não o servidor da empresa.

Você teria alguma dica a respeito disso.

ps: não sei se fui claro.

Grato

[8] Comentário enviado por eric.shimizu em 27/10/2005 - 10:15h

Muito bom.... fiz uns testes aqui e funcionou perfeito...
Artigo muito bem explicado...
Parabéns

[9] Comentário enviado por mcruz em 24/05/2006 - 16:51h

Fabiano,
Muito bom artigo. Eu fiz uns testes e funcionou também, mas estava ocorrendo o seguinte problema:

qdo se digitava no browser /serv1, não funcionava
qdo se digitava no browser /serv1/, funcionava

passou a funcionar qdo modifiquei as linhas

ProxyPass /serv1/ http://192.168.0.22:80/serv1/
ProxyPassReverse /serv1/ http://192.168.0.22:80/serv1/

para

ProxyPass /serv1/ http://192.168.0.22/serv1/
ProxyPassReverse /serv1/ http://192.168.0.22/serv1/

[10] Comentário enviado por kakaroto em 03/09/2008 - 10:22h

ola fiz a configuração conforme mas não funciona, quer dizer até funciona mas ele tenta puxar o ip invalido estou tentando redirecionar para o OWA e ele abre pede login e senha e depois qndo começa a abrir o OWA fica pensando pensando e na barra de estatus mostra q ele esta tentando o ip invalido segue minha conf

ProxyRequests Off
ProxyPass /exchange http://192.168.3.2/exchange
ProxyPassReverse /exchange http://192.168.3.2/exchange
AllowCONNECT 443
<Directory /var/www/exchange>
Order Allow,deny
Allow from all
</Directory>
Redirect Permanent /exchange https://192.168.3.2/exchange

ProxyVia On
CacheRoot "/usr/local/apache/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1

Se alguém tiver alguma idéia de onde estou errando, os modulos estao carregados meu apache é a versão 1.3

atenciosamente.

[11] Comentário enviado por raptor_mogi em 03/09/2008 - 20:39h

Saudações caro amigo, realmente fiz esse tipo de serviçõa já faz um bom tempo... mas vamos lá..
bom pelo que percebi parece que está faltando umas barrinhas nas chamadas do proxypass e proxypassreverse.
Se sua configuração está assim como você postou está faltando o que percebi foi o seguinte

ProxyPass /exchange/ http://192.168.3.2/exchange/
ProxyPassReverse /exchange/ http://192.168.3.2/exchange/
Redirect Permanent /exchange/ https://192.168.3.2/exchange

Bom nem vou olhar o resto, se vc seguiu a documentação o que faltou foi isso, agora se não funcionar dê uma revisada
porque o trêm funciona sim..rs

Abraços.

[12] Comentário enviado por kairok em 01/11/2008 - 20:31h

Opa, estou com o mesmo problema que o kakroto.

E não é falta de barras,

Quando vc digita inicialmente o endereço do servidor ele exibe a 1º página sem alterar o endereço, mas ai qnd clica em algum link ou tenta realizar login na página ele mostra o IP do servidor web, isso na rede interna, qnd testei na internet ele retornava erro e exibia o endereço interno na url do browser.

[13] Comentário enviado por shotcult em 01/12/2008 - 15:25h

Muito bom estava pesquisando algo sobre isso, segui seu tutorial e funcionou 100% agradeça a seu amigo que lhe ajudou tambem, foi de muita utilidade pra mim Obrigado por contribuir.

[14] Comentário enviado por shotcult em 02/12/2008 - 09:23h

Galera segue como configurei para não acontecer este problema de acesso so a primeira pagina.

<VirtualHost *:80>
ProxyPreserveHost Off
ProxyPass / http://IP-DO-SERVIDOR/
ProxyPassReverse / http://IP-DO-SERVIDOR/
ServerName nome.nomedodominio.com.br
Redirect Permanent / http://nome.nomedodominio.com.br
</VirtualHost>

ProxyVia On

<IfModule mod_disk_cache.c>
CacheRoot "/usr/local/apache/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
</IfModule>

Deste jeito quando digito nome.nomedodominio.com.br ele entra na primeira pegina quando logo ele vai para exemplo: nome.nomedodominio.com.br/index.php e assim por diante não mudando o nome.nomedodominio.com.br pelo ip interno que ocasiona erro no acesso de fora da rede.

[15] Comentário enviado por rodrigo.a.sc em 04/02/2012 - 08:58h

Po, irei colocar Um desafio :

Caso eu queira instalar um certificado digital para o website como eu faria ?

Onde ele deveria ser hospedado, no apache ou nos windows2k ??



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts