quinta-feira, 4 de julho de 2013

Proxy Reverso Apache

By on 01:38


Hospedar serviços web em vários servidores pode dar um pouco de dor de cabeça para o acesso unificado. Como forma de segurança, podemos colocar um intermediário entre a internet e os serviços que serão acessados. Este intermediário é o servidor proxy, neste caso não é necessário nenhuma configuração adicional nos servidores clientes. Mas o servidor proxy deve ter um arquivo para cada cliente. 

 Cenário

A empresa.com.br tem um site, um serviço glpi e um serviço moodle, foi requisitado os seguintes acessos:

Site : www.empresa.com.br
Moodle : www.empresa.com.br/moodle
Glpi : www.empresa.com.br/glpi



Vamos às configurações:



Todas as configurações são feitas no servidor proxy.
Para o uso do proxy reverso, deve-se habilitar alguns módulos do apache:
root# a2enmod proxy proxy_balancer proxy_connect proxy_html proxy_http

Confira muito bem se os módulos foram carregados, caso não tenha sucesso na habilitação de algum, você deve instalar o módulo que não foi habilitado corretamente.

Agora é só criar os aquivos para redirecionamento:

Para o site o arquivo ficaria assim:
root # vim /etc/apache2/sites-available/site
ProxyVia On
<VirtualHost *:80>
     ServerName www.empresa.com.br
     ProxyPreserveHost     On
     ProxyRequests         Off
     ProxyPass             /              http://192.168.1.20/
     ProxyPassReverse      /              http://192.168.1.20/
     ProxyPass             /includes      http://192.168.1.20/includes
     ProxyPassReverse      /includes      http://192.168.1.20/includes
     Redirect Permanent    /              http://192.168.1.20/
  
  </VirtualHost>

Para o moodle o arquivo ficaria assim:
root # vim /etc/apache2/sites-available/moodle
ProxyVia On
<VirtualHost *:80>
     ServerName www.empresa.com.br
     ProxyPreserveHost     On
     ProxyRequests         Off
     ProxyPass             /moodle              http://192.168.1.11/
     ProxyPassReverse      /moodle              http://192.168.1.11/
     ProxyPass             /moodle/includes     http://192.168.1.11/includes
     ProxyPassReverse      /moodle/includes     http://192.168.1.11/includes
     Redirect Permanent    /moodle              http://192.168.1.11/
  
  </VirtualHost>

Para o glpi o arquivo ficaria assim:
root # vim /etc/apache2/sites-available/glpi
ProxyVia On
<VirtualHost *:80>
     ServerName www.empresa.com.br
     ProxyPreserveHost     On
     ProxyRequests         Off
     ProxyPass             /glpi              http://192.168.1.10/
     ProxyPassReverse      /glpi              http://192.168.1.10/
     ProxyPass             /glpi/includes     http://192.168.1.10/includes
     ProxyPassReverse      /glpi/includes     http://192.168.1.10/includes
     Redirect Permanent    /glpi              http://192.168.1.10/
  
  </VirtualHost>

Depois é só habilitar os sites e reiniciar o apache:

root# a2ensite site moodle glpi
root# service apache2 restart

Assim seus serviços estarão por trás do servidor proxy, que será responsável de encaminhar as requisições aos servidores web internos. O interessante é que o apache pode servir a outros servidores web como IIS, lighthttpd, nginx, etc.


Referências:
http://publib.boulder.ibm.com/httpserv/manual70/mod/mod_proxy.html

1 comentários:

  1. Olá Erick,
    Tenho uma situação muito parecida com esta sua. Apliquei as configurações como vc sugeriu. Quando habilito apenas o site, o proxy funciona perfeitamente, contudo, quando habilito um outro serviço (no meu caso, redcap), o site deixa de funcionar e o redcap funciona com erro. Segue as configurações:

    Site:
    ProxyVia On


    ServerName sds.unb.br
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / http://164.41.147.151/
    ProxyPassReverse / http://164.41.147.151/
    ProxyPass /includes http://164.41.147.151/includes
    ProxyPassReverse /includes http://164.41.147.151/includes
    Redirect Permanent / http://164.41.147.151/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined



    Redcap (.../forms)
    ProxyVia On


    ServerName sds.unb.br
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass /forms http://164.41.147.150/
    ProxyPassReverse /forms http://164.41.147.150/
    ProxyPass /forms/includes http://164.41.147.150/includes
    ProxyPassReverse /forms/includes http://164.41.147.150/includes
    Redirect Permanent /forms http://164.41.147.150/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined



    Obrigado.

    ResponderExcluir