Ip reale su log Apache con reverse proxy Nginx
In una infrastruttura web che espone siti e servizi usando un reverse proxy Nginx davanti ai web server Apache, generalmente, accade che le chiamate fatte al server web hanno come sorgente il reverse proxy. Questo comporta che i file di log del server web registreranno come ip client sempre e solo l'ip del reverse proxy. Tutto questo anche se, Nginx, ha tra i suoi header HTTP X-Forwarded-For.
HTTP X-Forwarded-For contiene l'ip reale del client, ma, Apache di default non preleva i dati da questo header. Per abilitare questa funzione è necessario installare sul web server Apache il modulo mod_rpaf:
apt-get install libapache2-mod-rpaf
Dopo l'installazione del modulo, quest'ultimo va configurato inserendo il seguente codice all'interno del file /etc/apache2/mods-available/rpaf.conf
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips xxx.xxx.xxx.xxx (indirizzo ip del reverse proxy)
</IfModule>
Salvato il file è necessario riavviare il web server Apache.
E' possibile anche forzare il passaggio degli header inserendo i seguenti parametri nel virtual host del reverse proxy Nginx:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;