Leon1010

Я в Соц.сетях:

Теги:

Ссылки

Передаем реальный IP в связке Apache + Nginx

В случае, когда на сервере установлена связка 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;
}
Запись опубликована в рубрике Администрирование с метками , .