Назад | Перейти на главную страницу

Лучшие практики поддержки активности для цепочки Nginx-Haproxy-Apache

Я использую Nginx для обслуживания статического контента и Haproxy для прокси-запросов к нескольким бэкэндам Apache2, обнаруженным через Zookeeper.

Nginx -> Haproxy -> Apache2

Согласно официальному веб-сайту Nginx, он объединяет соединения с длительным сроком службы на их пути к серверной части, например этот, сокращая количество подключений до минимума.

Поэтому я предполагал, что Nginx - это то место, где должен быть включен Keepalive, и для него установлено большее значение, в моем случае «keepalive_timeout 600»;

Затем он обращается к Haproxy на локальном порту с включенной опцией httpclose для серверной части Apache:

опция httpclose Включение или отключение пассивного закрытия HTTP-соединения

HAProxy еще не поддерживает режим проверки активности HTTP. Таким образом, по умолчанию, если клиент взаимодействует с сервером в этом режиме, он будет анализировать, регистрировать и обрабатывать только первый запрос каждого подключения. Чтобы обойти это ограничение, можно указать «option httpclose». Он проверит, установлен ли заголовок «Connection: close» в каждом направлении, и добавит его, если он отсутствует. Каждый конец должен реагировать на это, активно закрывая TCP-соединение после каждой передачи, что приводит к переключению в режим закрытия HTTP. Любой заголовок «Соединение», отличный от «закрыть», также будет удален.

Эта опция может быть установлена ​​как во фронтэнде, так и в бэкэнде. Он включен, если хотя бы один из внешнего или внутреннего интерфейса, поддерживающего соединение, включил его.

Затем Haproxy направляет подключения к Apache2.

Итак, я предполагаю, что в этом случае мне придется отключить поддержку активности Apache, поскольку а) Nginx объединяет соединения б) Haproxy закрывает их.

Правильно ли я рассуждаю и как лучше оптимизировать поддержку активности в такой цепочке, как эта?

Обновить: это В теме ServerFault отмечается, что также более выгодно удалить keepalive из Haproxy (и, как я полагаю, избавиться от httpclose), поскольку задержка между Haproxy и Apache будет слишком низкой, чтобы в любом случае оправдать удаление рукопожатия.

Так что нам остается Nginx (KA) -> Haproxy (без KA) -> Apache (без KA)

Это лучший вариант?