Задать вопрос
Ответы пользователя по тегу HAproxy
  • Как сделать повторный запрос на HAPROXY?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    У вас здесь несколько вопросов
    Я добился только такого поведения. Клиент отправляет запрос, получает ошибку и если он повторно отправит запрос, то идет редирект на резерв. А вот чтоб автоматом, сразу, без дополнительных запросов - не получается

    нет, клиент должен сделать еще один реквест - на первый он уже получил 503
    The HTTP protocol is transaction-driven. This means that each request will lead to one and only one response


    и второй, немного иной по своей сути
    Можно ли с помощью хапрокси, сделать так, чтобы тот же запрос на котором ответ 503, автоматически перенаправлялся на резервный без полного переключения траффика на резерв?

    Немного непонятно, ваш способ который вы упомянули работает без полного переключения трафика? Если нет - можно попробовать балансировку куками https://www.haproxy.com/documentation/haproxy-conf...
    То есть работать без настройки "бэкап" сервера, а просто в случае ошибки сетить куку server2 и снимать ее на стороне сервера, а без куки направлять на server1
    Ответ написан
  • Как маршрутизировать uri в haproxy?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    распределение реквестов по разным бэкендам делается во фронтенд секции (директива use_backend ), вы нам ее не показали. Скорее всего проблема где-то там.
    Для большего понимания работы ACL прочитайте секцию https://docs.haproxy.org/2.6/configuration.html#7.2 документации HAProxy
    Ответ написан
    Комментировать
  • Как сделать редирект не чувствительными к регистру в Haproxy?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    зачем редирект, не проще реврайтить на лету конвертируя к lower case, вы же все равно тем же серверам этот реквест скормите
    http-request set-path %[path,lower]
    если дополнительно хотите и кверю преобразовать в lower -
    http-request set-query %[query,lower]
    или можно вообще весь URI обработать
    http-request set-uri https://%[req.hdr(Host),lower]%[path,lower]?%[query,lower]


    если все же хотите редирект то
    http-request redirect  code 301  location https://%[hdr(host),lower]%[capture.req.uri,lower]


    примеры выше - почти все из документации HAProxy или блога HAProxy
    Ответ написан
    Комментировать
  • Каков принцип работы haproxy?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    если бэкенд сервера не резолвятся в паблик (да и в других случаях) вы можете использовать опцию ssl verify none
    в бэкенде
    server BACKEND_SERVER IP:443 ssl verify none
    таким образом при соединении будет использованo https соединение, но не будет проверяться сертификат, который отдается бэкенд сервером
    Как правило, если вы хотите проверять сертификат бэкенд сервера - хапрокси должен иметь возможность это сделать, если же бэкенды слушают на самоподписанном сертификате или внутреннем - проще ( вы же не добавите кого попало в конфиг, хотя можно и заморочиться) использовать ssl verify none
    Ответ написан
    Комментировать
  • Умеет ли haproxy в липкую балансировку траффика в зависимости от содержимого заголовка?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    https://www.haproxy.com/blog/introduction-to-hapro... - но нужно определять параметры стикнеса самому

    можно прилипнуть к кукам, которые устанавливаются из параметра квери resumableIdentifier, взяв его с помощью
    https://cbonte.github.io/haproxy-dconv/2.1/configu...
    пример прилипания к кукам https://www.haproxy.com/blog/enable-sticky-session...

    Я, в общем то, никогда не делал такого, но начал бы с документации по `stick on` :D
    Ответ написан
    Комментировать
  • Как в haproxy сделать, чтобы подставлялся для каждого домена свой сертификат?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    frontend domain.com
    bind 0.0.0.0:443 ssl crt /etc/haproxy/certs/domain.com.pem

    На 443 порту у вас все эти сайты терминейтятся, а сертификат вы указываете один.
    конкретно в вашем случае необходимо директиву crt указывать несколько раз:
    bind 0.0.0.0:443 ssl crt /etc/haproxy/certs/domain.com.pem crt  /etc/haproxy/certs/en.domain.com.pem crt  /etc/haproxy/certs/ru.domain.com.pem crt ...

    Или же - проще - указать директорию где лежат правильно приготовленные сертификаты и загрузить их все одно опцией crt /etc/haproxy/certs/
    HAProxy в алфавитном порядке будет подставлять сертификаты. Соответственно если у вас в папке лежит устаревший сертификат для en.domain.com и новый для wildcard.domain.com - загружаться будет en... пока вы его не удалите и не перезагрузите HAProxy. Сертификаты из папки подгружаются при старте HAProxy и при замене сертификатов надо перезагружать софт (особенно актуально, если вы используете загрузку из папки)
    К сожалению, вы не указали версию HAProxy и OpenSSL либы с которой собрана хапрокси.
    В зависимости от версии хапры, опенссл и наличия\отсутствия openssl либы оно может работать по разному.
    Ответ написан
    5 комментариев
  • Как сделать перенаправление в haproxy?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Общий алгоритм такой:
    1. пишете разные бэкенды для каждой версии эксчейнжа - бэкенды смотрят на свою версию
    2. пишете acl по нужным вам заголовкам
    3. пишете use_backend be_newservers if acl_newservers - на новые серверы
    default_backend old_servers

    Всегда ориентируйтесь на конфигурацию вашей версии HAProxy
    https://cbonte.github.io/haproxy-dconv/
    Ответ написан
    Комментировать
  • Как настроить ssl в haproxy для нескольких сайтов?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    в конфиге фронтенда указывайте папку с сертификатами.
    что-то вроде
    frontend fe_main
    bind *:443 ssl crt /etc/haproxy/crt
    В папке /etc/haproxy/crt должны лежать файлы сертификатов с полной цепочкой и приватным ключом (если у вас 1й работает то скорее всего вы все правильно делаете в этом пункте)
    Обработка сертификатов будет производиться в порядке сортировки файлов: если у вас два файла сертификата на один домен, но один файл назван domain.name.pem а второй www.domain.name.pem то всегда будет работать первый для сайта domain.name
    Ответ написан