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

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

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

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