Как я запускал новый сервер под linux

Мне рассказали, что Linux вообще лучше подходит для серверов, чем freebsd. Ну я и повелся. Заказал новый сервер с федорой. Дали мне его. И проблемы начались сразу же.

Во первых, в коллекции пакетов нет webmin. Пришлось ставить ручками. Во вторых — вебмин «не работал». Проблема оказалась очень банальной — iptables перекрылывал доступ по всем портам, кроме 22го, открытого.

Бороться с этим нужно было так:

Открываем /etc/sysconfig/iptables и добавляем туда:

-A INPUT -p tcp —dport 80 -j ACCEPT

Есть и другие варианты написания правила открытия портов, но это базовое. Собственно 80й порт тоже был закрыт.

После этого запускаем:

/etc/init.d/iptables restart

Вуаля, работает.

Дальше началось следующее веселье — в федоре стоит SeLinux — это какая-то очень хитрая система защиты основанная на правах доступа. С включеной этой системой ничего не работало, точнее как минимум апач не имел доступа ни к чему. Есть вариант настройки прав для апача, но у меня почему-то не сработало. Поэтому пришлось её пока отключить совсем.

Отключается selinux так:

в файле /etc/selinux/config прописываем:

SELINUX=disabled

Как применить настройки без перезагрузки сервера я не понял, поэтому после этого перезагрузился и тогда апач+nginx заработали как надо.

Следующая проблема была с установкой модуля rpaf для апача, чтобы скрипты видели реальные айпишники. Про то, как решать эту проблему под freebsd я уже писал. Под линухом вышло немного сложнее — rpaf пришлось собирать руками.

Для того,чтобы поставить rpaf, нужно поиметь пакет httpd-devel:

yum -y install httpd-devel

Дальше делаем:

cd /usr/local/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Ну и дальше стандартно правим конфиги апача и nginx’а и перезапускаем оба.

Пока переношу всю инфу со старого сервера на новый, больше особых проблем не возникало, пока всё работает как часы.

***

Постовой:

Инструктор по вождению , Бесплатные объявления алматы, Алкоголизм.

***
Спонсор недели LinkFeed.

В закладки!

Nginx + apache 2 = нет real-ip. Способ решения.

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

Если кто не знает, 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
RPAFEnable On

Первая строка — это айпишник(и) прокси(ей), вторая — говорит апачу, что 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’а.

Все, проблема решена.

зы

Всё хочу написать серию статей «Nginx для чайников», да вот руки не доходят.