# 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

If you perform a clean installation of Plesk, nginx will be turned on by default. If you upgrade from earlier versions, you can install the «Nginx web server» component at any time after the upgrade in Tools & Settings > Updates (under «Plesk») > Add/Remove Components. Once the component is added, start the Reverse Proxy Server (nginx) service in Tools & Settings > Services Management (under «Server Management»).

You can view the version of the installed nginx server in Tools & Settings > Server Components (under «Server Management»).

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

To return to the configuration with a single Apache web server, stop the Reverse Proxy Server (nginx) service in Tools & Settings > Services Management (under «Server Management»).

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

Примечание

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