Quando usamos o nginx como proxy reverso com o apache no backend, o ip do cliente que apache recebe em seus logs é o do nginx. Desta forma, o log do apache e a aplicação rodando nesse backend irá receber o mesmo ip do servidor nginx e não do cliente que acessou o serviço. Como consequência, surgem diversos problemas, principalmente quando tentamos identificar as requisições, seja por segurança ou para própria utilização da aplicação.
Para contornar o problema, o nginx possui o parâmetro HTTP X-Forwarded-For header
que encaminhar o ip real do cliente para o apache. No entanto, o apache não resolve isso por padrão e para reconhecer o ip do cliente enviado pelo nginx é preciso instalar o módulo mod_rpaf
.
Instalação
A instalação do mod_rpaf
no Debian/Ubuntu é simples, basta executar o comando abaixo:
apt-get install libapache2-mod-rpaf
Uma vez instalado, é preciso configurar o arquivo /etc/apache/mods-enable/mod_rpaf.conf
alterando o parâmetro RPAFproxy_ips
para o ip do nginx. Neste caso, 127.0.0.1
.
Agora reinicie o apache para que ele receba o endereço de ip correto nos logs de acesso.
service apache2 restart
Se ainda assim não funcionar. Verifique se as configurações do proxy reverso no nginx possui os parâmetros abaixo:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;