Недавно понадобилось развернуть 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.