Реальные IP адреса в связке Apache2 и Nginx

 22 декабря 2014      
 Linux - CentOS      
 Комментариев еще нет

После установки проксирующего сервера Nginx 1.6.1 поверх работающего Apache 2.2.22 обратил внимание, что в статистике посещений все заходы осуществляются с одного адреса, а именно с адреса самого сервера. То есть сервер Nginx стал единственным посетителем для Apache.
Проверить правильно ли у вас настроена связка Nginx и Apache можно простым способом, для этого в корне сайта создадим файл add_remote_test.php со следующим содержимым:

<?php print $_SERVER['REMOTE_ADDR'];?>

Запустим его в окне браузера (http://myserver.com/add_remote_test.php). Если увидите свой реальный IP адрес (внешний адрес компьютера с которого вы вышли в интернет), то у вас все настроено правильно, а если вне зависимости от адреса клиента (посетителя сайта) вы видите адрес вашего вебсервера, то воспользуйтесь нижеследующей инструкцией.

Сервер для тестирования

Все действия я проводил на выделенном сервере с операционной системой CentOS 6.5 x86_64, на котором в качестве вебсервера используется Apache 2.2.22, а поверх которого в качестве проксирующего сервера установлен Nginx 1.6.1.

Установка модуля mod_realip2

Для устранения вышеописанной проблемы необходимо установить модуль Apache под названием mod_realip2.
В официальных репозиториях CentOS данного модуля нет. Поэтому соберем его вручную.
Установим необходимые зависимости:

# yum install httpd-devel

Установка из исходников на github.com:

# mkdir ~/mod_realip2
# cd ~/mod_realip2
# wget -O mod_realip2.zip https://github.com/discont/mod_realip2/archive/master.zip
# unzip mod_realip2.zip
# cd mod_realip2-master
# apxs -c -i mod_realip2.c
# cp ./centos/realip2.conf /etc/httpd/conf.d

По умолчанию в CentOS x64 модуль располагается по адресу /usr/lib64/httpd/modules/mod_realip2.so. Проверьте, так ли это.
Отредактируйте файл /etc/httpd/conf.d/realip2.conf. Он должен выглядеть следующим образом:

LoadModule realip2_module modules/mod_realip2.so

RealIP On
RealIPProxy 127.0.0.1 888.777.555.444
RealIPHeader X-Real-IP

где 888.777.555.444 — адрес вашего сервера
Проверим настройки Nginx. Добавляем при необходимости следующие строки в файл /etc/nginx/nginx.conf для каждого вебсервера:

location / {
    proxy_set_header X-Real-IP $remote_addr;
}

После чего перезапустим вебсерверы:

# service httpd restart
# service nginx restart

Проверьте результат, запустите в браузере наш проверочный php скрипт http://myserver.com/add_remote_test.php. Вы должны увидеть адрес посетителя, то есть ip адрес с которого вы зашли на сервер, но никак не адрес вашего сервера.

Список использованных источников

  1. mod_realip2: правильные IP-адреса в Apache2
  2. Apache2 module rewrites connection’s Remote IP to value of X-Real-IP header

 Метки:  ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Технический блог © 2016
SQL - 47 | 0,183 сек. | 6.97 МБ