Update от 10.12.2011: 512 MB для комфортной работы сайта мало, периодически в кеш попадают пустые страницы. Поэтому отключил nginx cache.

Опыт системного и сетевого администрирования у меня достаточно большой. Ещё в 1994-м году я познакомился с Linux и FreeBSD, примерно в это же время починил считавшийся безнадёжно испорченным Silicon Graphics одного пафосного рекламного агентства, что придало мне сил и уверенности в нужности знания Unix. Занимался запуском и администрированием одного национального ISP, потом датацентра, занимаясь и серверным, и сетевым оборудованием.

Четыре года назад благодаря @kostiantyn'у приобщился к OS X, купив свой первый ноутбук Macbook.

Через два года у меня закономерно появился Macbook Pro и на волне восторга ко мне пришла идея сделать нишевый блог, в котором я смогу на базе своего опыта в Unix рассказывать о Mac OS X.

20 августа 2009 года, когда MBP лежал, завёрнутый в подарочную упаковку, я поднял сайт и разместил первую статью "WWDC-2009", которая раньше лежала вроде бы на Tumbler'е.

Сайт работал на выделенном сервере моих друзей, находящемся в Германии. В качестве CMS я привычно выбрал Wordpress, так как давно его использовал на проекте "Traverse Team". Движок работал на Apache практически "из коробки", никакого тюнинга, кеширования, оптимизации я не делал. Конечно, скорость генерации страниц была низка, но меня это почти устраивало - сайт по скорости (вернее сказать "медленности") не выделялся из множества других. Операционная система была FreeBSD, под сайт я сделал jail.

Сервер был не очень мощным, к тому же через пару месяцев он стал себя странно вести - из-за Kernel Panic он напрочь вис, помогала только перезагрузка по питанию. Можно было бы для начала обновить операционную систему, но там вертелись сервисы, завязанные на определённые версии PHP/MySQL, и обновиться было практически невозможно. Но скорее всего была проблема с модулем памяти.

Как раз в это время у меня появился второй Macbook. К тому же в моём доме кроме единственного ADSL-провайдера появился второй провайдер, предлагающий подключение по Ethernet, да ещё со статическим IP. Само собой, я воспользовался появившимися возможностями, и сделал из ноутбука сервер под Mac OS X для моего сайта (часть 1, часть 2, часть 3).

Сайт проработал на этом ноутбуке, перемещавшемся с кухонного шкафа на холодильник и обратно, три месяца с января по март 2010 года. Всё было бы хорошо, но вечерами люди в локальной сети занимались скачиванием, что ухудшало откликаемость сайта, а потом две недели подряд у провайдера были проблемы с маршрутизацией сети апстримам, что приводило к пропаданию анонсов на стыке Telia - Level3. Недоступность сайта по часу в день для блога некритична, но не реагировать было по крайней мере невежливо по отношению к читателям.

После анализа предложений я остановился на Linode и перенёс сайт на VPS. Полтора года пользуюсь сервисом и очень доволен. Взял VPS Linode 512 с 512 MB RAM (хочется больше, но денег жаль).

В процессе настройки я остановился на комбинации Nginx (фронтэнд) + Apache (бэкэнд) + привычный плагин кеширования W3 Total Cache. В процессе настройки обращался к сайтам Juev и Snupt (конкретные статьи искать лень, почитайте сайты сами, не пожалеете).

Скорость генерации была нормальная, но хотелось большего. Через некоторое время стал использовать в nginx кеширование проксированных ответов от Apache с патчем выборочного очистки кеша и плагином под Wordpress. Сайт стал носиться. От 2 запросов в секунду на голом Apache я пришёл к 5000 запросов. Неплохо.

Всё было бы хорошо, но 512 MB RAM маловато для того, чтобы держать два web-сервера, MySQL, да ещё и memcached для W3 Total Cache. На днях я "попал". Из-за нехватки памяти я потерял все настройки темы (а их было много, включая кастомный CSS). Хорошо, что старые страницы были в кеше и я смог восстановить данные (бекап, конечно, есть, я делаю дамп MySQL раз в сутки и файлы раз в 4 часа, но восстанавливаться с нуля не хотел).

Поэтому сделал "ход конём". Убрал memcached, W3 Total Cache, Apache. Оставил только nginx, php запустил в fastcgi и настроил nginx fastcgi_proxy. При concurrency level 100 при тестах с самого сервера получаю под 5000 запросов в секунду. К тому же избавился от нескольких лишних компонентов. Памяти хватает.

Статья была "лирикой". Если хотите деталей, как всё сконфигурировано, пишите в комментариях - если будут желающие, то я напишу отдельную статью.