Obtendo IP real em uma aplicação web atrás de um proxy reverso

Quando utilizamos um proxy reverso como varnish ou nginx (até mesmo com o apache da pra fazer isso) temos um pequeno problema em aplicações que logam ip do usuário (como um sistema de comentários, por exemplo).

Ao configurar um proxy reverso, normalmente denominamos um header separado para o IP real da aplicação, pode ser qualquer header, mas normalmente é utilizado o header XForwardedFor (que chamamos de XFF)

Existem diversas soluções para isto, a primeira atraves de php, bastando inserir o código abaixo em algum arquivo de include global (como arquivo de conexão ao banco)

<?php
$_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'];
?>

Para uma solução a nível de webserver (apache) podemos usar o mod_rpaf.
Para instalar no ubuntu (e distros baseadas em debian)

apt-get install libapache2-mod-rpaf

Para demais distros, pode-se obter o source na página do projeto:
http://stderr.net/apache/rpaf/