Обновление софта на FreeBSD 6.0 и выше

Только что нашло прозрение. FreeBSD конечно рулит. Обновление всего софта на сервере в 2 команды — это за гранью моего понимания.

Итак, чтобы получить свежую коллекцию портов пишем:

portsnap fetch

Это позволит автоматически слить коллекцию портов с ближайшего миррора. Если её на сервере нет, то будет создана. Если коллекция уже есть и была создана портснапом, то нужно набрать:

portsnap update

И будет скачена вся информация об обновленных портах.

Дальше, чтобы обновить ВЕСЬ софт на сервере (если он ставился из портов разумеется), нужно набрать всего одну команду:

portupgrade -ai

Запустится программа портапгрейд в интерактивном режиме. Она будет говорить какой из портов устарел и спрашивать, хотители его обновить. Я такой эксперимент провел — больше 200 портов обновились совершенно без проблем, сервер не умер и даже не перестал работать ни на минуту.

Да, ставится портапграде так:

cd /usr/ports/ports-mngt/portupgrade

make install clean

Чувствую себя одмином.

зы

На сколько я понимаю, в Red Hat Linux это всё не сильно сложнее.

В закладки!

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 для чайников», да вот руки не доходят.

Черный четверг

Второй раз за неделю упал сервер. Причем упал так, что не подавал никаких признаков жизни. Такое уже было. Что самое поразительное, старый сервер, который был СИЛЬНО слабее этого, за пол года ни падал ни разу. В чем причина — понять не могу.

Совершенно добивают менеджеры проектов от компании с которыми работаю в сфере создания сайтов. Эти люди не понимают вообще ничего. Где работает фабрика по их производству — просто загадка.