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.
Parte 2: 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:
Incluir vhosts na configuração. Para isso acrescente ou descomente a linha abaixo:
NOTAS:
Incluir o arquivo de mod-proxy. Para isso acrescente ou descomente a linha abaixo:
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:
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:
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:
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
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
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
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.