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

 22 декабря 2014      
 GNU Linux - CentOS / Debian      
 1 комментарий      
 2404

После установки проксирующего сервера 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 адрес с которого вы зашли на сервер, но никак не адрес вашего сервера.

Рекомендую прочесть:  Как удаленно установить CentOS

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

  1. mod_realip2: правильные IP-адреса в Apache2
  2. Apache2 module rewrites connection’s Remote IP to value of X-Real-IP header
Поделись этой страницей с друзьями!

Прочтите это обязательно

Что такое регулярные выражения javascript и возможности их использования

Любые регулярные выражения в сайтостроении представляют собой мощное и достаточно эффект ...

На правах рекламы 
Warning: Invalid argument supplied for foreach() in /var/www/moonbackru/data/www/moonback.ru/wp/wp-content/themes/secret-garden3/single.php on line 123
Далее

Время генерации страницы, количество SQL запросов и объем памяти Wordpress

На многих сайтах внизу страницы указана информация о времени генерации (построении) страницы, количество обращ ...

WordPress html php wordpress Далее

Обсуждение: есть 1 комментарий

  1. Дима:

    Спасибо большое! Только ваша статья и помогла!

    Ответить

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

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

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных", на условиях и для целей определенных политикой конфиденциальности.

2018 © Технический блог
SQL - 92 | 0,114 сек. | 8.54 МБ
доступность сайта