| Сегодня будет пост, который к сеонизму имеет мало отношения, но может оказаться весьма полезным тем, кто держит свои сервера. Если кто не знает, nginx - это такой очень маленький и очень быстрый сервер, который может работать как прокси. И , если его поставить поверх апача, то тогда скрипты в переменной REMOTE_ADDR будут видеть не айпишник клиента, а айпи nginx’а (127.0.0.1 обычно). В случае с apache 1.3 эта проблема решается с помощью модуля mod_realip от создателя nginx. Но в случае apache 2 это решается несколько сложнее. Я не могу решить эту задачу с пол года. В основно из-за того, что и без этого всё работало. Да и вообще было влом вновь ковыряться с сервером, благо пока всё работает как часы. Но сегодня всё-таки решился и сделал это. Итак, чтобы пофиксить проблему с реальными айпишниками клиентов при использовании связки nginx+apache2, нужн-то всего лишь поставить один модуль к апачу и прописать 3 строки в конфигах. Модуль нужен rpaf2. Если у вас freebsd, то его брать нужно тут ports/www/mod_rpaf2, дальше стандартно make install clean, дальше он уже сам себя в пишет в httpd.conf, нужно будет только раскомментировать строчку #LoadModule rpaf_module libexec/apache2/mod_rpaf.so Путь к .so файлу может отличаться. Это не суть важно. Если у вас не freebsd, то брать модуль отсюда. Собирать и прописывать вышеприведенную строчку в конфиге апача. Дальше там же в конфиге апача нужно добавить 2 строчки: RPAFproxy_ips 127.0.0.1 Первая строка - это айпишник(и) прокси(ей), вторая - говорит апачу, что rpaf юзать нужно. Что делает rpaf - он из заголовка X-Forwarded-for делает REMOTE_ADDR. Собственно остается в конфиге nginx’а в разделе server дописать одну строчку: proxy_set_header X-Forwarded-for $remote_addr; Теперь нужно перезапустить оба сервер любым способом. Через панель управления там или из шела. С апачем всё понятно, а вот для управления nginx’ом можно сделать такой вот .sh файлик: kill -HUP `cat /usr/local/etc/nginx/logs/nginx.pid` Эта строка подаёт процессу nginx сигнал о том, что ему нужно применить новый конфиг и перезапустить worker-процессы. nginx.pid - соответственно файл с текущим номером мастер-процесса nginx’а. Все, проблема решена. | |
| Категория: Интересные статьи | Просмотров: 343 | |
Главная » Nginx + apache 2 = нет real-ip. Способ решения.