NGINX + Apache — получение реального IP адреса (real IP address)

Сервера NGINX часто используют в качестве прокси для сервера Apache, на котором расположен основной сайт, например на движке WordPress. Если зайти на такой сайт из любой точки Internet, то по умолчанию в логах будет зарегистрирован вход с IP адреса сервера NGINX, а не внешний адрес. Такая ситуация естественно не устраивает. Это мы сейчас и исправим.

Демонстрация выполняется на Ubuntu в отдельных Docker контейнерах Apache и Nginx. На сервере Apache был установлен WordPress.

Предположим, что сервера и клиент имеют следующие IP адреса:

  • NGINX server: 172.19.0.3
  • APACHE server: 172.19.0.4
  • Client: 21.249.154.250
  • Адрес сайта: https://myblog.ru

Для тестирования на сервере Apache необходимо создать файл test_ip.php

cd /var/www/html
nano test_ip.php

В файл добавить текст:

<?php
echo $_SERVER['REMOTE_ADDR'];

Для файла установить права:

chown www-data:www-data test_ip.php
chmod +x test_ip.php

Проверим как сервер Apache определяет IP адрес. Для этого необходимо зайти по адресу:

https://myblog.ru/test_ip.php 

Отобразится IP адрес 172.19.0.3, а нужно, чтобы был 21.249.154.250

172.19.0.3

Необходимо выполнить следующие настройки:

Apache server

0. Если mod_remoteip не установлен, то необходимо установить

sudo apt install -y libapache2-mod-php

1. Если установлен mod_rpaf, то его необходимо деактивировать

a2dismod rpaf

2. Активировать модуль mod_remoteip

a2enmod remoteip

3. Создать файл remoteip.conf

nano /etc/apache2/mods-enabled/remoteip.conf

Файл должен содержать следующее:

<IfModule mod_remoteip.c>
# RemoteIPHeader X-Forwarded-For
RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1 172.19.0.3 <Ваши IP адреса серверов>
</IfModule>

Вместо <Ваши IP адреса> необходимо указать IP адреса NGINX сервера, в нашем случае это 172.19.0.3

4. Перезапустить Apache

// Для Ubuntu
service apache2 restart

Nginx server

1. Отредактировать файл nginx.conf

nano /home/user/conf/web/nginx.conf

В секцию location добавить строки:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

2. Перезапустить nginx

service nginx restart

Проверка

Снова проверим как сервер Apache определяет IP адрес. Для этого необходимо зайти по адресу:

 https://myblog.ru/test_ip.php

Если все сделали правильно, то отобразится адрес:

21.249.154.250

На этом настройка закончена. Удачи!

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей
Алексей
1 год назад

Отличная статья! все получилось. у меня установлен fail2ban на втором сервере он видит логи apache с реальным ip и даже записывает в бан эти ip но все равно дает доступ с этого ip.наверно он не видит этого адреса. может вы знаете как передавать реальный ip от nginx proxy на другой сервет с fail2ban?