Nginx+Apache2 ускоряем обработку запросов


Недавно я описал схему, которая позволяет на 5$-м дроплете DO выдерживать более 50 запросов в секунду, при этом без ощутимой нагрузки на сервер. Такой результат сам по себе внушительный, учитывая, что сервер наделен всего-то 1 ядром и 512Мб ОЗУ. Стоит тут отдать должное самой идее дроплетов от digitalocean — использование SSD накопителей, что дает солидную прибавку к скорости. Фактически, кеширование в оперативной памяти и не обязательно, когда под рукой настолько быстрая дисковая подсистема.

Тем не менее, к нашей модели высокопроизводительного сервера можно добавить еще один полезный элемент — nginx. Nginx — это производительный сервер, использование которого с грамотным твиком позволяет добиться высокой скорости обработки запросов. Именно по этому рекомендуется использовать nginx в качестве front-end сервера, а вот apache ставить уже на back-end.

Возможности nginx позволяют кешировать статические элементы (изображения, html-страницы, js-скрипты, css), в итоге в некоторых ситуациях apache может вообще не затрагиваться при обращении клиента, т.к. nginx все отдает из своего кэша. Это экономит приличное количество ресурсов, т.к. комбайн по прозвищу apache не плодит своих воркеров. Полная цепочка срабатывает лишь в том случае, если требуется отображение динамического контента. Кроме того, для nginx есть модуль ngx_pagespeed (от google), делающий то же самое, что и его аналог для apache.

Но это далеко не единственная схема использования nginx. Его функционал так же позволяет реализовать балансировку запросов, что важно при использовании нескольких серверов, например, разнесенных по разным континентальным зонам. Ну, об этом мы еще поговорим, как-нибудь. Затронем и «горячую» тему вертикального/горизонтального масштабирования. В этом же материале будем дополнять наш высокопроизводительный сервер еще одним компонентом — кеширующим nginx’ом.

Итак, тут довольно простая схема. Мы имеем apache, работающий в данный момент на 80-м порту. Нам его необходимо будет перевести на порт 8080, а на 80-м развернуть, собственно, nginx. Конечно, порт 8080 — это не обязательное условие. Можете использовать, например 82 или 8181. Главное, не выставляйте зарезервированные 😉

Первым делом настраиваем nginx.

Открываем конфигурационный файл и начинаем творить. Сайт наш будет — www.site.com.

Вот такие вот не хитрые настройки. Подробнее про методы обработки соединений можете прочитать тут. Теперь нам надо сделать рестарт демона.

Скорее всего получим ошибку, ведь 80-й порт занят в данный момент apache. Что ж, надо исправить сие недоразумение. Идем в конфиг апача.

Находим там все

и меняем на

Но и это еще не все. Есть еще один хитрый конфиг, где нам так же надо поменять *80 на *8080. Идем и меняем.

Все, теперь перезапускаем apache. Следом за ним перезапускаем nginx. Готово.

Что мы теперь имеем? Имеем продвинутый сервер с font и back эндами. Если пользвоатель запрашивает статику — ему отдает ее более быстрый nginx, если пользователь запрашивает динамику — вступает в работу вся накрученными нами схема кеширования. Наслаждайтесь 🙂