После трех лет разработки, Игорь Сысоев анонсировал выход первой, публично доступной, версии, одного из лучших по соотношению производительность/функциональность http-серверов - nginx 0.1.0 (http://www.sysoev.ru/nginx/).
Кратко, основные достоинства:
- изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;
- гибкость конфигурации на уровне Apache, настройка таймаутов и размеров буферов;
- проксирование без кэширования;
- поддержка keep-alive и pipelined соединений;
- виртуальные сервера, определяемые по ip-адресу и имени;
- изменение URI с помощью регулярных выражений;
- модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы;
- поддержка kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.4), /dev/poll (Solaris 8+), select и poll;
- поддержка sendfile (FreeBSD 3.1+), sendfile (Linux 2.2), sendfile64 (Linux 2.4+) и sendfilev (Solaris 8+);
- экспериментальная поддержка SSL;
- экспериментальное ограничение скорости отдачи статических ответов;
Ниже, привожу текст краткой аннотации с сайта sysoev.ru (http://www.sysoev.ru/):
"Сервер использует два процесса - рабочий, он обрабатывает входящие соединения, и управляющий, который перезапускает рабочий процесс в случае изменения конфигурации, переоткрытия логов и аварийного завершения рабочего процесса. Кроме того, возможна работа в виде одного процесса. В этом случае при изменении конфигурации старые соединения используют прежнюю конфигурацию, а новые - новую. В принципе, в сервере одновременно может быть несколько конфигураций - старые удаляются только после того, как закроются все соединения, их использующие. Также реализована схема плавного апгрэйда сервера - по получению сигнала USR2 управляющий процесс fork()ается и загружает исполняемый файл. При этом слушающие сокеты наследуются новым сервером и он может принимать соединения наравне со старым сервером.
Рабочий процесс обрабатывает соединения, используя kqueue, select, poll и /dev/poll. Поскольку архитектура сервера модульная, то каждый из этих методов сделан в виде отдельного модуля. Собственно, и реализация протокола HTTP - это тоже набор модулей. Обработка запросов похожа на обработку в Apache - запросы проходят через несколько фаз, а ответы - через фильтры. На данный момент готово три фильтра: byte ranges (докачка), сжатие и chunked ответ. Фильтры работают с цепочками буферов, причём те из буферов, что находятся в файлах, на FreeBSD, Linux и Solaris могут выводиться с помощью sendfile. Сервер поддерживает keep-alive соединения и pipelined запросы, виртуальные сервера (ip- и name-based), умеет раздавать статику, индексы (то есть, выдачу "/index.html" вместо "/") и переписывать URI с помощью регулярных выражений. Кроме того, есть не до конца оттестированные кэш открытых файлов и кэширующий reverse proxy."
URL: http://www.sysoev.ru/nginx/
Новость: http://www.opennet.dev/opennews/art.shtml?num=4442