Как включить HTTP / 2 на HAProxy?
Недавно мы перешли с HTTP на HTTPS. Поскольку мы уже перешли на HTTPS, мы думаем о переходе на HTTP/2, чтобы получить преимущества производительности.
Как было объяснено выше, запросы между браузером и LB защищены (HTTPS), в то время как связь между LB и сервером приложений все еще использует HTTP
Какова возможность включения HTTP / 2 при текущей настройке? можем ли мы включить HTTP / 2 между браузером и LB во время связи между LB а серверы приложений остаются на HTTP?
3 ответов:
HAProxy 1.8 поддерживает HTTP/2
Из объявления 1.8 :
HAProxy 1.8 теперь поддерживает HTTP / 2 на стороне клиента (в разделах frontend) и может выступать в качестве шлюза между клиентами HTTP/2 и вашими приложениями HTTP/1.1 и HTTP/1.0.Вам понадобится Директива
h2в вашемhaproxy.conf. Из руководство по HAProxy HTTP/2 и динамической балансировке нагрузки CertSimple:frontend myapp bind :443 ssl crt /path/to/cert.crt alpn h2,http/1.1 mode httpБолее старые версии HAProxy
Более старые версии HAProxy, такие как 1.6 и 1.7, поддерживают только сквозной HTTP / 2-ie, направляя трафик на отдельный сервер приложений, поддерживающий HTTP / 2. Это значительно сложнее - смотрите другие ответы о том, как это сделать. Чтобы завершить HTTP / 2 и прочитать трафик на HAProxy, вам понадобится HAProxy 1.8.
Haproxy еще не поддерживает http / 2
Единственная поддержка, которую он имеет, - это обнаружение запроса http / 2 и передача потока https / tcp443 tcp серверу, который поддерживает https и http / 2Вот чей-то путеводитель http://m12.io/blog/http-2-with-haproxy-and-nginx-guide
Следующее должно работать на вашем балансировщике нагрузки, если вы можете запустить некоторые
NginXнаряду сHaProxy.NginXis (ab)используется как чистый Терминатор SSL, а не как полнофункциональный веб-сервер, поэтому никакой контент не обслуживается этимNginX.Предупреждение: Это было сделано в спешке, поэтому ничто не подтверждает, что это действительно работает. Некоторые примеры отсутствуют, поэтому извините за ссылки.Я называю эту идею в честь знаменитой картины Мюнхгаузена "тянущий себя и лошадь". из трясины :Метод Мюнхгаузена
Во-первых, сделайте настройку H2 в HaProxy , как в ответе Скотта Фаррелла со следующими настройками:
frontend http-in mode http bind *:80 option forwardfor default_backend nodes-http frontend https-in mode tcp bind *:443 ssl crt /etc/ssl/dummy.pem alpn h2,http/1.1 use_backend nodes-http2 if { ssl_fc_alpn -i h2 } default_backend nodes-http frontend http-lo mode http bind 127.0.0.1:82 #http-request set-header X-Forwarded-For req.hdr_ip([X-Forwarded-For]) default_backend nodes-http backend nodes-http mode http server node1 web.server:80 check backend nodes-http2 mode tcp server loadbalancer 127.0.0.1:81 check send-proxyЭто закольцовывает соединение
HTTP/2обратно к вашей машине loadbalancer и принимает декодированные запросы на ввод loadbalancing снова черезhttp-lo.Теперь на самом LB, начните
NginXслушать на порту81как в конфигурации экземпляр, чтобы прервать соединениеHTTP/2и прокси-сервер его обратно в опять ваш балансировщик нагрузки.В NginX обязательно:
Обратите внимание, что эта настройка в основном статична. Изменение касается всех этих доменов и их TLS-сертификатов.
Использовать send-proxy-протокол в NginX
Завершите SSL, используя
HTTP/2вNginXПрокси все прозрачно (ака. тупой) назад в порт
HaProxy82# Sorry, example `NginX`-config is missing here, # but it includes something like: proxy_pass http://127.0.0.1:82;Не забудьте включить заголовок Client-IP via
X-Forwarded-Forв запрос прокси (я не знаю, как настроить NginX на использование протокола "Send Proxy" на исходящем прокси требования заказчика).ASCII изображение
HTTP/2потока запросовBrowser | HTTP/2 V Loadbalancer HaProxy *:443 | frontend https-in | backend nodes-http2 | send-proxy | TCP (transparent, HTTP/2) V Loadbalancer NginX 127.0.0.1:81 | HTTP/2 termination | proxy_protocol | proxy_pass 127.0.0.1:82 | Add header X-Forwarded-For | HTTP V Loadbalancer HaProxy 127.0.0.1:82 | frontend https-lo | Forward Header X-Forwarded-For | backend nodes-http | # DO YOUR LOADBALANCING HERE | HTTP V web.server:80Да, он петляет 2 раза через HaProxy,но благодаря тому, как быстро работает HaProxy, это работает молниеносно.
Реальная неэффективная часть - это когда речь заходит о распаковке заголовковHTTP/2в простые заголовкиHTTP..

Comments