Por curiosidade, fui atrás de uma solução de balanceamento de carga entre servidores apache. Aqui no trampo, o balanceamento de carga em cima dos servidores apache é feita através de hardware …. eu queria ver como seria possível utilizando o próprio apache como proxy reverso, vi que era possível utilizando o mod_proxy do apache
Após dois dias, alguns HOWTOS que não funcionam devido ao problema de balanceamento de sessões (sticksessions) e uma aula de boxe perdida, obtive a solução, BINGO!
Apache como Proxy Reverso
Segundo o Wiki …. “Proxy reverso é um servidor proxy que é fica na frente de outros servidores. Tipicamente proxy reverso é usado na frente de servidores web. Todas as conexões vindo da internet endereçadas para um dos servidores web são roteadas pelo proxy server… “
Ou seja, toda e qualquer conexão passa pelo proxy server, que é o ponto de contato entre o cliente e os servidores.
Razões para utilizar um proxy reverso
- Segurança: o proxy server provê uma camada adicional de segurança separando ou mascarando os tipos de servidores que estão atrás do proxy.
- Encripitação/ SSL acceleration: Quando sites seguros são criados, a encriptação SSL as vezes não é realizada pelo servidor web e sim pelo proxy reverso que é equipado por um hardware de aceleração SSL.
- Balanceamento de carga: Proxy reverso pode distribuir a carga em vários servidores .
- Caching: Um proxy reverso pode diminuir a carga dos servidores web promovendo cache, diminuindo consideravelmente o número de requisições nos servidores web.
- Compressão : O proxy pode otimizar e comprimir o conteúdo aumentando assim a velocidade.
Cenário

Cenário bem simples: Um proxy reverso na frente dos servidores apache. Toda e qualquer requisição é feita diretamente no proxy que realiza o balanceamento de carga.
Beleza… ele realiza o balanceamento de carga mas… meu site não é estático… tb faço uso de seções e aí? ele é capaz de saber em qual apache está minha seção??
Calma jovem, a solução a seguir contempla esse tipo de dúvida!! No proxy será criado um coockie balanceado que será roteado para o servidor web correto! That's the point!!
Esse foi o grande lance da solução. todos os HowTo espalhados exigiam modificações tanto no proxy quanto nos apaches que estão em baixo e esta solução não... só a configuração no proxy.
Instalação:
Com os pacotes do apache e php já instalados devemos ativar o modúlos mod_proxy , mod_headers .
A maneira Debian de ser… Digite!
# a2enmod proxy
Module proxy installed; run /etc/init.d/apache2 force-reload to enable.
# a2enmod header
Module headers installed; run /etc/init.d/apache2 force-reload to enable.
Configuração:
No virtual host do proxy adicione as seguintes configurações
———————————————————————————————————————
Header add Set-Cookie “MYCOOKIE=SOMEVALUE.%{BALANCER_WORKER_ROUTE}e; path=/;” env=BALANCER_ROUTE_CHANGED
ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=MYCOOKIE
<Proxy balancer://cluster>
BalancerMember http://192.168.1.24 route=www1
BalancerMember http://192.168.1.25 route=www2
</Proxy>
ProxyPassReverse / http://192.168.1.24/
ProxyPassReverse / http://192.168.1.25/
—————————————————————————————————————————–
lbmethod : método de balanceamento entre os servidores.
byrequests |bytraffic| bybusyness : o default é byrequest , vide documentação do mod_proxy do apache.
stickysession=MYCOOKIE
nome do cookie balanceado: O valor é geralmente setado como: JSESSIONID ou PHPSESSIONID
BalancerMember: Cada host que compões os servidores web que serão balanceado
Testando…
Utilizando o browser acessamos o nosso proxy http://ip_do_proxy. Agora para matar a curiosidade veja os cookies no browser mais precisamente a variavel MYCOOkIE nos cookies do proxy!