# Apache и nginx

Nginx – это дополнительный высокопроизводительный веб-сервер, который обычно используется как обратный прокси и позволяет улучшить работу основного веб-сервера (Apache), отвечающего за хостинг клиентских сайтов. Этот веб-сервер был разработан специально для передачи больших объемов статического контента (изображений, видео, css, xml и так далее). Nginx намного эффективнее справляется с большим количеством одновременных подключений, чем Apache. А также потребляет гораздо меньше памяти в расчете на одно подключение.

Для наиболее оптимального использования nginx Plesk настраивает его как обратный прокси-сервер между Интернетом и Apache (см. схему ниже). Это означает, что nginx работает как внешний веб-сервер, который принимает все входящие запросы от посетителей сайтов. Эти запросы отправляются Apache, который в свою очередь разделяет их в зависимости от того, какой тип контента запрашивается – статический или динамический. Если запрашивается статический файл (jpg, css, html и т.д.), Apache пропускает запрос через все имеющиеся обработчики (применяет конфигурацию `.htaccess`, перезаписывает URL и т.д.) и возвращает nginx ответ, содержащий только расположение запрошенного файла в файловой системе. Nginx находит этот файл и отправляет его клиенту. Если запрашивается динамический файл (например, скрипт PHP), Apache исполняет этот файл и отправляет ответ nginx, который доставляет его клиенту.

Такая комбинация из nginx и Apache обеспечивает следующие преимущества:

- Увеличивается максимальное количество одновременных подключений к одному сайту.
- Сокращается потребление процессорного времени и памяти на сервере. Этот эффект будет наиболее ощутим для сайтов с большим объемом статического контента (фотогалереи, видеохостинги и так далее).
- Оптимизируется обслуживание посетителей с низкой скоростью соединения (GPRS, EDGE, 3G и т.д.). Например, допустим, что клиент со скоростью подключения 10 KБ/с запрашивает некий сценарий PHP, который генерирует ответ размером 100 KБ. Если на сервере не установлен nginx, то этот ответ доставляется веб-сервером Apache. В течение всех 10 секунд, необходимых для доставки ответа, Apache и PHP продолжают потреблять полный объем системных ресурсов для поддержания этого открытого подключения. Если же nginx установлен, Apache перенаправляет этот ответ ему (соединение между nginx и Apache очень быстрое, так как оба находятся на одном сервере) и высвобождает системные ресурсы. Благодаря тому, что nginx потребляет меньше памяти, общая нагрузка на систему сокращается. Если у вас много таких медленных подключений, использование nginx позволит вам значительно повысить производительность сайтов.

Технические подробности того, как Plesk обрабатывает HTTP-запросы с помощью nginx, приведены далее в этом разделе. Информацию о том, как включить поддержку nginx в Plesk, смотрите в разделе Установка nginx. Если вы не хотите использовать веб-сервер nginx, вы можете отключить его, как описано в разделе Отключение nginx. Если вы хотите, чтобы nginx обслуживал все HTTP-запросы к веб-контенту, смотрите Изменение настроек веб-сервера Apache.

## Как обрабатываются HTTP-запросы в Plesk с nginx

Чтобы обеспечить интеграцию между nginx и Apache, Plesk использует два дополнительных модуля Apache:

- mod_aclr2. Этот модуль устанавливает обработчик, который запускается после обработчиков всех остальных модулей Apache (mod_rewrite; модулей, связанных с `.htaccess`; mod_php и т.д.). Таким образом, в случае запроса динамического контента модуль mod_aclr2 никогда его не получит, так как этот запрос будет выполнен вышестоящими обработчиками соответствующих модулей Apache (mod_php, mod_perl, mod_cgi и т.д.). Единственным исключением являются запросы SSI: как только они доходят до модуля mod_aclr2, он перенаправляет их соответствующим обработчикам. Если запрашивается статический файл, mod_aclr2 находит точное расположение файла в файловой системе и сообщает его nginx.
- mod_rpaf или mod_remoteip С точки зрения Apache все клиенты имеют один и тот же IP-адрес – адрес сервера nginx (см. схему выше). Это создает проблемы для сайтов и веб-приложений, использующих IP-адреса клиентов для идентификации, сбора статистики и так далее. Модуль mod_rpaf (в Apache 2.2) или mod_remoteip (в Apache 2.4) решает эту проблему, заменяя IP-адрес сервера nginx на IP-адреса клиентов во всех запросах. Если подробнее, то этот модуль использует специальный заголовок X-Forwarded-For, в который nginx помещает IP-адрес клиента.

Давайте более подробно рассмотрим, как Plesk обрабатывает запросы статического и динамического контента с помощью этих модулей.

Обработка HTTP-запроса статического файла происходит следующим образом (см. схему):

1. Клиент отправляет запрос веб-серверу.
2. Nginx добавляет в этот запрос заголовки X-Accel-Internal (используется модулем mod_aclr2) и X-Forwarded-For (содержит IP-адрес клиента) и отправляет его Apache.
3. Apache получает запрос и пропускает его через зарегистрированные обработчики (применяет конфигурацию `.htaccess`, перезаписывает URL и т.д.). На этом этапе модуль mod_rpaf заменяет IP-адрес сервера nginx в переменной Apache REMOTE_ADDR на адрес клиента из заголовка X-Forwarded-For.
4. После прохождения через все зарегистрированные обработчики запрос попадает в модуль mod_aclr2. Обработчик проверяет наличие заголовка X-Accel-Internal. Если он есть, модуль отправляет серверу nginx ответ с заголовком X-Accel-Redirect и пустым содержимым. Этот заголовок содержит точное расположение файла, определенное модулем mod_aclr2.
5. Получив ответ, сервер nginx находит соответствующий файл и передает его клиенту.

На расположенной ниже схеме приведен пример обработки запроса файла GIF размером 2 КБ.

В случае с динамическим контентом шаги с первого по третий будут такими же. Затем запрос передается обработчику соответствующего модуля Apache (mod_php, mod_perl, mod_cgi и т.д.). Запрос никогда не доходит до модуля mod_aclr2 (за исключением запросов SSI). Обработчик формирует ответ и отправляет его nginx, который в свою очередь доставляет его клиенту. На следующей схеме приведен пример обработки запроса файла PHP.

## Установка nginx

В случае установки Plesk с нуля сервер nginx включен по умолчанию. В случае обновления с более ранней версии вы всегда можете добавить компонент nginx на странице Инструменты и настройки > Обновления > Установить/удалить компоненты. После установки компонента запустите службу Обратный прокси-сервер (nginx) на странице Инструменты и настройки > Управление службами.

Номер установленной у вас версии nginx можно посмотреть на странице Инструменты и настройки > Серверные компоненты.

## Выключение nginx

Чтобы вернуться к конфигурации с одним веб-сервером (Apache), остановите службу Обратный прокси-сервер (nginx) на странице Инструменты и настройки > Управление службами.

Чтобы снова включить nginx, запустите службу Обратный прокси-сервер (nginx).

Примечание

Запуская и останавливая службу Обратный прокси-сервер (nginx), вы не только включаете и отключаете nginx, но и меняете конфигурацию веб-сервера (при одной внешним веб-сервером является комбинация из nginx и Apache, при другой ― только Apache). Перезапуск работает так же, как со всеми остальными службами: служба nginx просто перезапускается.