Quando seu sistema está em um servidor web recebendo requisições de um servidor web apache2 através de mod_proxy, é comum verificar, justamente por estar atrás de um outro servidor, que as requisições são recebidas e logadas com o IP do servidor Apache2 que está a frente no tratamento da requisição.
Este é o comportamente padrão esperado, mas que surpreende diversos administradores, que gostariam de ter o ip original da requisição disponível e logado no servidor final/interno. E para que isto ocorra, é necessário alterar a configuração padrão do sistema Apache2 que está está servindo de mod_proxy para que o mesmo forneça o cabeçalho X-Forwarded-For e com isto o log do sistema ‘cliente’ possa funcionar da maneira esperada pelos administradores em geral.
Iremos apresentar abaixo uma das forma de fazer os dois servidores operarem de modo que o servidor que está operando ‘atrás’ do principal em modo proxy tenha acesso as informações da originais da requisição
- Quando o servidor proxy é uma Apache2 usando a configuração ProxyPreserveHost em mod_proxy
- Esta diretriz de configuração pode ser utilizada para preserva o host remoto. Isto é útil para situações onde o hosts virtuais baseados em nome e o servidor de backend e precisam conhecer/saber o nome do host virtual
- Abra o arquivo de configuração do md_proxy do seu servidor e entre com a diretriz de configuração ProxyPreserveHost On.
- Reinicialize o servidor apache2 para a configuração passar a valer
Apenas como exemplo de como inserir a diretriz de configuração, abaixo um arquivo de configuração de exemplo:
<VirtualHost *:80> ServerName servidor_interno_respondendo_externamente.drall.com.br RewriteEngine On ProxyPreserveHost On ProxyPass / http://ip_interno_para_redirecionar/ ProxyPassReverse / http://ip_interno_para_redirecionar/ ServerAdmin usuario_administrador@drall.com.br ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>