19
запросы так, как необходимо разработчику, а вся бизнес-логика реализуется в
back-end на выбранном языке программирования, в моём случае Python[22].
Как правило, его используют либо как самостоятельный HTTP-сервер,
используя в бекенде PHP-FPM, либо в связке с Apache, где Nginx
используется во фронтэнде как кеширующий сервер, принимая на себя
основную нагрузку, отдавая статику из кеша, обрабатывая и отфильтровывая
входящие запросы от клиента и отправляя их дальше к Apache. Apache
работает в бекэнде, работая уже с динамической составляющей проекта,
собирая страницу для передачи её в кеш Nginx и запрашивающему её
клиенту. В моём случае вместо Apache будет использоваться Gunicorn.
Nginx получил первый официальный релиз в 2004 году, по этой
причине, его разработчик был осведомлен о проблемах конкурентности, с
которыми сталкиваются сайты при масштабировании. Благодаря этим
знаниям Nginx изначально был спроектирован на базе асинхронных
неблокирующих event-driven алгоритмов.
Nginx создает процессы-воркеры каждый из которых может
обслуживать тысячи соединений. Воркеры достигают такого результата
благодаря механизму основанному на быстром цикле, в котором
проверяются и обрабатываются события. Отделение основной работы от
обработки соединений позволяет каждому воркеру заниматься своей работой
и отвлекаться на обработку соединений только тогда, когда произошло новое
событие.
Каждое соединение, обрабатываемое воркером, помещается в event
loop вместе с другими соединениями. В этом цикле события обрабатываются
асинхронно, позволяя обрабатывать задачи в неблокирующей манере. Когда
соединение закрывается оно удаляется из цикла.
Этот подход к обработке соединений позволяет Nginx'у невероятно
масштабироваться при ограниченных ресурсах. Поскольку сервер
однопоточный и он не создает процессы под каждое соединение,