Default Green Orange
Gemini_13's Blog
Блокнот полезных вещей
Home
    • Карта сайта
    • Обо мне
RSS

nginx + Apache 2.4 и REMOTE_ADDR (решение проблемы)

Linux, Настройка сервера Add comments

Недавно понадобилось развернуть 1С Битрикс на одном из серверов. К сожалению, официально битриксу нужен apache2 или связка nginx + apache2. Решено было поднимать связку. Если бы всё было просто и банально, как всегда, эта статья не существовала бы, но нашлась проблема, о решении которой, я хочу написать, чтобы не наступать на те же грабли в будущем.

Если верить гуглу и докам, то в версии Apache 2.4 есть модуль mod_remoteip, которым можно заменить привычный mod_rpaf. Подключив mod_remoteip увидел, что реальные IP передаются в PHP, но в логах апача вижу только 127.0.0.1. Долго не разбирался и решил настроить mod_rpaf, но и тут поджидал сюрприз — mod_rpaf в Apache 2.4 работает с багом. Если подключить mod_rpaf, то в логах видно реальные IP, а вот PHP и не получает.

Решение было нужно быстро, поэтому были настроены оба модуля, которые дополняли друг друга. Честно скажу, то идея использовать два модуля вместо одного мне не нравится, но тем не менее, проблем в работе пока не вижу. 🙂

Модуль mod_remoteip уже встроен в апач, а mod_rpaf нужно установить:

# apt-get install libapache2-mod-rpaf

Подправим настройки nginx добавив такой кусок в виртуальный хост или глобально в nginx.conf (под ваши нужды):

proxy_buffering on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:80;

Теперь пропишем конфиг для модуля mod_rpaf:

# nano /etc/apache2/mods-available/rpaf.conf

приведем к такому виду:

<IfModule rpaf_module>
    RPAFenable On

    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On

    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
    RPAFproxy_ips 127.0.0.1 ::1

    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
    RPAFheader X-Real-IP
</IfModule>

Теперь небольшой костыль. К сожалению, я не разобрался (и не хотел, если честно) как положить конфиги mod_remoteip рядом с самим модулем в папку mods-available, поэтому положил их в папку conf-available.

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

вот такие вот конфиги:

RemoteIPHeader X-Real-IP
RemoteIPTrustedProxy 127.0.0.1

Теперь пора включать конфиг для remoteip и сами модули:

# a2enconf remoteip
# a2enmod remoteip
# a2enmod rpaf

И перезагружаем веб-серверы:

# server nginx restart
# server apache2 restart

После перезагрузки реальные IP пользователей должны появится как в логах, так и в переменной REMOTE_ADDR в PHP.


21 января, 2016  
Tags: apache, apache2, debian, mod_remoteip, mod_rpaf, nginx, php, REMOTE_ADDR, remoteip, rpaf

Leave a Reply

  • Рубрики

    • FreeBSD (20)
    • Linux (46)
    • MySQL (11)
    • Windows (14)
    • Железо (3)
    • Мои моды к TorrentPier II (16)
    • Настройка сервера (49)
    • Разное (33)
    • Скрипты (30)
  • Свежие записи

    • Поля форм на Yii2: textInput(), passwordInput() и hiddenInput()
    • Поля форм на Yii2: CheckboxList()
    • SpeedTest датацентров Digital Ocean
    • Патчим Gearman на Debian
    • nginx + Apache 2.4 и REMOTE_ADDR (решение проблемы)
    • Создание и подключение swap-файла в Debian
    • Запуск PhpStorm 9 x64 на Windows
    • Рекурсивная замена прав доступа для папок и файлов в Linux
    • VirtualBox 5 + phpVirtualBox на Debian 8.2 (jessie)
    • Обработка сессий PHP с помощью Redis + phpredis на Debian 7.8
  • Ссылки

    • My GitHub
  • Архивы

    • Июнь 2016 (2)
    • Март 2016 (2)
    • Январь 2016 (3)
    • Ноябрь 2015 (2)
    • Август 2015 (1)
    • Февраль 2015 (1)
    • Январь 2015 (7)
    • Октябрь 2014 (1)
    • Июнь 2014 (1)
    • Май 2014 (1)
    • Апрель 2014 (7)
    • Февраль 2014 (9)
    • Январь 2014 (5)
    • Декабрь 2013 (7)
    • Ноябрь 2013 (1)
    • Октябрь 2013 (3)
    • Август 2013 (4)
    • Июль 2013 (4)
    • Июнь 2013 (3)
    • Апрель 2013 (2)
    • Март 2013 (2)
    • Февраль 2013 (6)
    • Январь 2013 (2)
    • Декабрь 2012 (1)
    • Ноябрь 2012 (2)
    • Октябрь 2012 (7)
    • Сентябрь 2012 (22)
Все права защищены © 2016 Gemini_13's Blog
G13.org.ua