Nginx я начал разрабатывать весной 2000 года и делал его около двух лет. Сначала он начал работать в Рамблере. Но первым проектом все-таки был www.zvuki.ru, на котором он отдавал mp3, затем www.foto.rambler.ru. Потом на нем начали делать Mamba (www.mamba.ru ) и эстонский сайт www.raid.ee (вроде Mamba). Но тогда он еще не был доступен — это была стадия альфа-тестирования. Сейчас nginx находится в стадии бэта-тестирования, но, в принципе, он стабилен.
В 2004 году вышел первый публично доступный релиз. Уже прошло 2,5 года. В марте прошлого года nginx проксировал и обслуживал 9,8% виртуальных российских серверов. В марте этого года на долю nginx приходилось уже, по-моему, 22,3% или 22,7%. Нельзя говорить, что пятая часть Рунета работает на nginx. Надо понимать, что это виртуальные серверы, не инсталляции nginx. На одном теле может быть тысяча серверов. Кроме того, все эти числа означают, что nginx используется как фронтенд. Сервер, который стоял до этого, в большинстве случаев никуда не делся. Как правило, это Apache. Иногда люди реализуют всю схему без сервера, то есть они запускают, поставив CGI, PHP, Perl. Кто, что умеет, то и запускает.
Что умеет делать nginx? При проектировании основное, что в него закладывалось, это передача статических файлов, картинок, объемных файлов по большому числу соединений, удержание постоянного (keep-alive) соединения с клиентом и проксирование запросов на другие сервера, то есть выполнение роли акселератора. Потом реальность внесла свои коррективы, появилась поддержка FastCGI, memcached.
Архитектурно nginx выглядит следующим образом. Есть основной процесс — мастер-процесс. Его, как правило, запускают под рутом, поскольку некоторые операции, которые он должен выполнить, возможны только именно от этого пользователя. Мастер-процесс запускает рабочие процессы — воркеры, которые занимаются облуживанием соединения. Каждый воркер работает с тысячами, возможно, с десятками тысяч соединений. Ему это не накладно. Воркеров может быть несколько, это позволяет работать на многопроцессорных машинах. Чем больше воркеров, тем больше операций можно производить.
Здесь показано одно из применений nginx. Он обрабатывает статические запросы с диска, передает что-то другим серверам, серверу FastCGI и может забирать запросы из memcached. Если в memcached ответа нет, можно перенаправить на эти сервера, которые его туда положат для следующего раза..
Полная версия на ProfyClub
HTTP, UNIX