В случае, когда на сервере установлена связка Apache + Nginx, где Apache является обработчиком скриптов, а Nginx кеширующим прокси-сервером, апач получает для всех подключений ip сервера, и соответственно пишет его в логах и выдает в переменной $_SERVER['REMOTE_ADDR']
Чтобы вместо IP сервера отображался IP посетителей, необходимо установить модуль rpaf для Apache.
# rpm -ivh http://download.ispsystem.com/repo/centos/release/6/x86_64/mod_rpaf-0.8.2-1.el6.x86_64.rpm
В папке /etc/httpd/conf.d/ появится файл mod_rpaf.conf такого вида:
LoadModule rpaf_module modules/mod_rpaf.so # #RPAF_Enable (On|Off) - Enable reverse proxy add forward # #RPAF_ProxyIPs 127.0.0.1 10.0.0.1 - What IPs to adjust requests for # #RPAF_Header X-Forwarded-For - The header to use for the real IP # address. # #RPAF_SetHostName (On|Off) - Update vhost name so ServerName & # ServerAlias work # #RPAF_SetHTTPS (On|Off) - Set the HTTPS environment variable # to the header value contained in # X-HTTPS, or X-Forwarded-HTTPS. # #RPAF_SetPort (On|Off) - Set the server port to the header # value contained in X-Port, or # X-Forwarded-Port. <IfModule mod_rpaf.c> RPAF_Enable On RPAF_ProxyIPs 127.0.0.1 ::1 RPAF_Header X-Forwarded-For RPAF_SetHostName On RPAF_SetHTTPS On RPAF_SetPort On </IfModule>
Заменяем 127.0.0.1 (в строке RPAF_ProxyIPs) на ip вашего сервера.
Перезагружаем Apache:
# service httpd restart
Если это не помогло, продолжаем:
Нам нужен модуль with-http_realip_module для Nginx. Поверяем, есть ли он в комплекте, командой:
# nginx -V
Если нет:
Далее
В /etc/nging/nginx.conf в разделе http, прописываем:
set_real_ip_from 176.9.150.77; #x.x.x.x - IP вашего сервера real_ip_header X-Real-IP; real_ip_recursive on;
Перезагружаем Nginx:
# service nginx restart
Чтобы узнать реальный IP адрес пользователя, еще можно использовать функцию:
function getIP(){ if (!empty($_SERVER['HTTP_CLIENT_IP'])){ $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } return $ip; }