Записи с тегом «howto»

Настройка правильных access логов для веб-сервера nginx

Мы начинаем готовить решения на базе веб-сервера nginx на своих серверах. В связи с чем будут появляться некоторые заметки по его работе и настройке. Итак, первая будет про логирование.

А что не так с логами? Получилось так, что по-умолчанию nginx пишет логи немного по-своему. И программы для сбора статистики вроде webalizer или awstats ругаются на неправильный формат логов.

Было log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

Стало log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"'; #"$http_x_forwarded_for"

После поправки конфига все заработало отлично. Статистика благополучно собирается.

Punbb + MySQL 4.1 лечим глюки

Недавно при переносе веб-сайта python.com.ua столкнулись с проблемой поддержки кодировок в php-форуме Punbb. Все давно знают что MySQL c ветки 4.1 поддерживает работу с текстовыми данными в разных кодировках, но почти всем php-шникам почему-то напряжно вставить три строчки кода лишние, чтоб небыло проблем с кодировкой.
Итак, в Punbb всё лечится установкой волшебной записи SET NAMES КОДИРОВКА. В Punbb это нужно сделать в дистрибутиве форума в файле
include/common.php
добавить нужно строчку с нужной кодировкой (в нашем случае это cp1251):
// set connection charset
$result = $db->query('SET NAMES CP1251;', __FILE__, __LINE__, $db->error());
Про кодировки в MySQL напишем отдельно и подробно позже.

Синхронизация django-powered сайта на нескольких серверах (зеркало/mirror).

Кому будет интересно, предлагаю простой способ синхронизации сайтов на djnago на нескольких серверах (зеркало/mirror). Данный способ будет рабочим только для сайтов, где нет постоянного потока обновлений. В основном это сайты компаний, архивы с документацией и т.д. Нюанс в том, что обновление может быть на главном сервере (мастере) а на всех остальных просто рабочая копия. Т.е. это не репликация, а просто зеркало. Такой вариант может быть особо удобен для сайтов с документацией, блогов или фотогалерей (без коментирования или голосования). Суть в том, что django может работать с несколькими базами данных в том числе и с SQLite, которая хранит все в файле базы. Для синхронизации просто поднимаем rsync-сервер. Если код сайта обновляется и есть какой-то CVS, то можно разделить мух и котлеты. Код обновлять через CVS, а медиа-файлы и базу через rsync.

typo blog - как готовить

Недавно вышла свежая версия блога на базе ruby on rails - typo. В новой версии много вкусностей, но хочу отметить важную для хостера особенность - инсталляцию движка. Теперь у typo тесная связь с менеджером пакетов ruby gem. Было приятно просто набрать в командной строке:
gem install typo
И о чудо :-) все поставилось и заработало. Но это только часть приятного, второй сюрприз - это удобная инсталляция именно для самого юзера. Набираем в командной строке:
typo install /my/home/www
И получаем рабочую копию блого-движка typo в своей пользовательской директории. После чего можно перенастроить дефолтные настройки:
typo config /my/home/www
И запустить встроенный http-сервер командой:
typo start /my/home/www
Подробнее про новый релиз можно прочитать у scottstuff.net Про команды typo можно прочитать подробнее в другом посте того же scottstuff.net

Настройка SASL И TLS в Postfix на хостинговом почтовом сервере

Прежде всего хочу отметить очень хороший сайт по настройке postifx. Подобрать себе нужное HOW-TO там можно без проблем. В моём случае пришлось пользоваться несколькими документами по настройке сабжа и немного погуглить. Цель была построить почтовый рилей + POP3/IMAP сервер для клиентов с повышеной безопасностью. А для почтового сервиса это практически означает криптование всего что только можно криптануть :). Не буду писать про настройку связки с базой и прочей приевшейся документации, а просто обращу Ваше внимание на несколько моментов. Также я не буду писать полное HOW-TO для ленивых :) Итак, что мы будем криптовать:
  • пароли в базе;
  • всю авторизацию клиентов (как SMTP так и POP3/IMAP);
  • обмен данными клиент-сервер и сервер-сервер;
Первым делом настроим сам postfix на предмет работы с SSL. Прежде всего он должен был скомпилирован с поддержкой SSL. Для каждой платформы проверять надо по разному. Потом надо сгенерировать ключ, как это сделать тоже много статей и описаний. По быстрому так:

# mkdir /postfix/configs_dir/ssl

# cd /postfix/configs_dir/ssl

# openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650

Следующим шагом будет настройка postfix (добавляем в main.cf):

smtp_use_tls = yes smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /postfix/configs_dir/ssl/smtpd.pem smtpd_tls_cert_file = /postfix/configs_dir/ssl/smtpd.pem smtpd_tls_CAfile = /postfix/configs_dir/ssl/smtpd.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom После этого получаем криптование при отправки и приёме почты на рилее. Потом ещё добавляем авторизацию через SASL для клиентов, чтоб могли с любого места пользоваться своим рилеем. Подразумевается что SASL тоже стоит в системе и postfix умеет с ним работать. Так как в нашем случае в качестве POP3/IMAP сервера выбран Courier-IMAP, то и авторизовать SMTP нам надо через него. Следовательно используем Courier-authlib, с которой умеет работать SASL. В postfix это выглядит так:

broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_auth_enable = yes В SASL, (lib/sasl2/smtpd.conf)

pwcheck_method: authdaemond log_level: 7 mech_list: PLAIN LOGIN authdaemond_path:/var/run/authdaemond/socket Получаем такую цепочку:

postfix <-> sasl <-> courier-authlib <-> sql-backend

Теперь о граблях... точнее об одной. В postfix есть такая опция smtpd_sasl_local_domain, она мешает ему авторизовать клиента. Глубоко не копал, просто погуглил и нашёл что такая бага есть, а всё остально заработало гладко.

Настройка SPF для почтового домена

Давно собирался настроить для хостингового домена нашего SPF - запись. Вот дошли руки повозиться с DNS. После того как спросил Google как это сделать, прошло 20 минут и всё готово. С технологией я был уже знаком, поэтому особо читать не пришлось долго, а просто надо было создать корректную SPF - запись. Был приятно удивлён визардом на официальном сайте SPF, который мне помог довольно быстро создать запись. После чего я её уже поправил руками и внёс в DNS. На этом же сайте есть документация и форум по этому всему делу. Ещё есть хорошие примеры по настройке в статье Howto define an SPF Record. Если хотите чтоб спамерам было немного труднее жить, сделайте это для своего домена!