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.
Parte 3: 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:
# 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
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/
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>
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>
<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
[]'s