Отображение реальных IP клиентов в логах apache (httpd), когда он стоит за nginx proxy (на примере C
Проблема
При использовании связки nginx – apache (nginx в качестве frontend) в логах апача получаем вместо IP клиента IP nginx. В результате скрипты или PHP не получают реального IP клиента, что не есть гуд.
Решение
В конфиге Nginx добавляем (внутри тэга location):
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr;
В apache необходимо установить модуль mod_rpaf
, брать его нужно в репозитории webtatic:
Для CentOS, RHEL или Fedora 7:
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
Для CentOS, RHEL или Fedora 6:
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
Для CentOS, RHEL или Fedora 5:
rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm
А пока пакет не появился в других репозиториях у меня лично есть готовые rpm-ки: mod_rpaf-0.6-3.i386.rpm mod_rpaf-0.6-3.x86_64.rpm
Ставим
rpm -ivh http:// valynkin .ru/mod_rpaf-0.6-3.i386.rpm
или
rpm -ivh http:// valynkin .ru/mod_rpaf-0.6-3.x86_64.rpm
В /etc/httpd/conf.d/rpaf.conf
указываем с какого IP к нам приходят запросы от nginx например:
RPAFproxy_ips 172.17.0.4
Рестартуем апач
/etc/init.d/httpd restart
проверяем появились ли правильные IP
tail -f /var/log/httpd/access_log
Готово.