Как стать автором
Обновить

Комментарии 11

НЛО прилетело и опубликовало эту надпись здесь
Да, отличное решение. Спасибо.
а чем nginx в этом плане хуже? Умеет и балансировать, и с https работать и отказоустойчивость присутствует.
Я, подозреваю, что ничем не хуже, просто в моем примере задача стоит именно в использовании HAProxy. Я хотел в статье сконцентрироваться на возможностях HAProxy и примерах конфигураций.
На хабре была статья по сравнению разных балансеров:
Битва балансеров
habrahabr.ru/post/179629/
В моём случае у nginx была проблема с аплоадами. Оно сначала кладёт ВСЁ тело запроса в собственный буфер, а потом вызывает бэкенд и отдаёт запрос ему. В итоге получаем цепочку типа: юзер заливает файло, файло кладётся в буфер первого nginx'a, который смотрит в инет, первый nginx вызывает второго, сидящего на впске во внутренней сети и отдаёт файло ему, а он уже отдаёт пассажиру, в котором крутится приложение, для которого всё это и затевалось. В итоге поставил haproxy. Pound тоже прокатывает, а вот nginx не умеет запрос напрямую отдавать, только через свой промежуточный буфер.
Вы про это?
Zero-copy forwarding is possible using the splice() system call under Linux, and results in real zero-copy starting with Linux 3.5. This allows a small sub-3 Watt device such as a Seagate Dockstar to forward HTTP traffic at one gigabit/s.
Источник: www.haproxy.org/#feat

В nginx 1.7.8 splice не обнаружен:
-*- mode: grep; default-directory: "~/Downloads/nginx-1.7.8/nginx-1.7.8/" -*-
Grep started at Thu Dec  4 10:02:25

find . -type f -exec grep -nHi -e splice {} +

Grep finished with no matches found at Thu Dec  4 10:02:25
Nginx не балансировщик, а web-сервер. Haproxy же балансировщик. Если нет времени на изучение haproxy, а nginx знаком, то поначалу можно решать задачу им.

Когда в 2012-м делали сравнение в компании, то получили слегка лучшие результаты для haproxy, зато увидели скудные возможности настроек по части балансировки.

Ставим nginx с кэшем и статикой перед haproxy, за которым логика на бэкендах.
Nginx прекрасный балансировщик. Что с ним не так?
Не умеет tcp-mode. Нельзя сделать ssl-passtrough.
На SLES 11 SP4 мы его корректно установить так и не смогли, например. Хотя на SUSE таких проблем замечено не было.
Нужно упомянуть, что когда HTTPS терминируется на haproxy — нужно в обратную сторону переписывать некоторые заголовки, например location, либо научить сайты понимать, что они находятся позади haproxy+https и генерировать все урлы соответственно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации