Содержание

Как передать реальный IP для Apache, работающем за прокси NGiNX

Начиная с Apache 2.4.1, в него входит модуль mod_remoteip, который может перезаписывать удаленный IP-адрес. Я рекомендую использовать mod_remoteip вместо mod_rpaf.

После того, как все настройки сервера в связке NGiNX + Apache сделаны, администратор сервера сталкивается с вопросом о том, как передать реальный IP пользователя web-серверу Apache, работающему за проксирующим NGiNX. В логи Апача пишутся IP не реальных пользователей, а IP локального NGiNX (127.0.0.1), то есть не несут никаких сведений о том, какой пользователь был на сайте.

Настройки Nginx

В локейшне с proxy_pass, обычно как указано ниже, добавим строки

    location ~ \.php$ {
        proxy_pass   http://127.0.0.1:8080;
		# + добавить:
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Real-IP $remote_addr;
    }

После этой небольшой правки конфига NGiNX, нужно перезагрузить его, чтобы эти правки вступили в силу и начали работать на сервере. Для этого нужно ввести команду:

service nginx restart

Если всё скопировано правильно, NGiNX тихо перезапустится. Можно переходить к донастройке Apache, чтобы он принимал и обрабатывал пробрасываемые данные с реальным IP пользователя.

Настройки Apache

Для того, чтобы Apache начал правильно воспринимать и главное, правильно обрабатывать реальный IP пользователя, пробрасываемый NGiNX, воспользуемся идущим в стандартном пакете Apache модулем remoteip (mod_rpaf устарел).

Включить модуль remoteip в Ubuntu, Debian

a2enmod remoteip

Вначале настроим работу модуля remoteip. Для этого в папке conf-available создадим файл remoteip.conf. Полный путь до этого файла:

/etc/apache2/conf-available/remoteip.conf

В этот файл запишем пару строчек:

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1

Теперь всё это нужно подключить к Apache. Подключим модуль remoteip к Apache. Но того мало, требуется применить настройки этого модуля. Для этого нужно выполнить команду:

a2enconf remoteip

Теперь модуль remoteip сконфигурирован и готов к работе. Осталось перезапустить Apache командой:

systemctl restart apache2

Готово! Все работает.