Реальные IP адреса в связке Apache2 и Nginx
Раздел(ы): GNU Linux - CentOS / Debian
Просмотры: 3960
Комментарии: 1
После установки проксирующего сервера 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 адрес с которого вы зашли на сервер, но никак не адрес вашего сервера.
Спасибо большое! Только ваша статья и помогла!