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: 147.400 ]

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


Configurando o Apache para o funcionamento do proxy



Passei um bom tempo estudando o funcionamento desse serviço de Proxy Reverse, pois eu não conhecia ninguém que já tivesse feito isso, porém tive o auxílio de um grande amigo e professor chamado Ulisses T.V. Guedes (responsável pela área de redes do Instituto Nacional de Pesquisa Espaciais) e aqui deixo meus votos de agradecimentos à ele.

No meu caso utilizei o Apache 1.3.27 instalado num Slackware 8.1. As aplicações envolvidas são:
  • Windows 2000 Server rodando o IIS com páginas ASP;
  • Windows 2000 Server rodando o Jakarta TomCat da Apache.
Suponhamos que esses 2 Servidores Windows já estão configurados para rodar, só que com IPs não roteáveis, ou seja, somente na rede interna.

No caso, somente o Apache que está rodando no Slackware tem o domínio válido e pode ser acessado. Chamaremos o domínio de www.empresa.com.br para o exemplo.

Como sou do tipo que gosto de fazer tudo na unha, tive que baixar o pacote .tar.gz do Apache, descompactar e compilar. Vamos a receita do bolo!

Os seguintes pacotes foram utilizados:
  • apache_1.3.27.tar.gz
  • mod_ssl-2.8.14-1.3.27.tar.gz
  • php-4.3.4RC2.tar.gz
  • openssl-0.9.6i.tar.gz
Vou ser bonzinho e explicar todos os passos desde a instalação do Apache completo até.... ;-)

NOTA: vou partir do princípio que você já fez o download dos pacotes, que podem ser facilmente encontrados a partir do site de busca http://freshmeat.net.

Primeiro passo, descompacte todos os pacotes num diretório qualquer. No meu caso, escolhi /usr/local/src e lá coloquei os arquivos:

# cd /usr/local/src
# tar -zxvf apache_1.3.27.tar.gz
# tar -zxvf mod_ssl-2.8.14-1.3.27.tar.gz
# tar -zxvf php-4.3.4RC2.tar.gz
# tar -zxvf openssl-0.9.6i.tar.gz


Comece a instalação pelo PHP:

# cd php-4.3.RC2
# ./configure --with-apache=../apache_1.3.27
# make
# make install


Agora vá para o diretório do OpenSSL:

# cd ../Openssl-0.9.6i
# ./config
# make
# make install


Agora o ModSSL:

# cd ../mod_ssl-2.8.14-1.3.27
# ./configure --with-apache=../apache_1.3.27 --with-ssl=../openssl-0.9.6i


Agora o Apache:

# ./configure --with-prefix=/usr/local/apache --with-bindir=/usr/local/bin --with-sbindir=/usr/local/sbin --enable-module=ssl --enable-module=proxy --enable-shared=proxy --enable-module-rewrite --enable-shared=rewrite --activate-module=src/modules/libphp4.a
# make
# make certificate
# make install


Falei que gosto de fazer as coisas na mão né? rs. Taí o resultado, porém funciona somente com os módulos que quero.

O importante são os parâmetros --enable-module=proxy e --enable-module=rewrite. No caso de instalações por RPM tipo RedHat, esses módulos vem ativados por padrão, bastando apenas desativar na configuração do httpd.conf o que você não deseja carregar.

Para finalizar a configuração do Apache, volte para o diretório do PHP e copie o arquivo php.ini-dist para /usr/local/lib/php.ini.

Página anterior     Próxima página

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

Utilizando o giFT para baixar e compartilhar arquivos na Internet

VivoZAP - Placa pcmcia

Texto puro - BitchX - cliente IRC

Autenticando o Speedy Business automaticamente em firewalls Linux

Instalando o Apache + PHP + MySQL no Slackware

  
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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts