Как включить HTTP / 2 на HAProxy?
недавно мы перешли с HTTP на HTTPS. Поскольку мы уже перешли на HTTPS, мы думаем о переходе на HTTP / 2, чтобы получить преимущества производительности.
как объяснялось выше, что запросы между браузером и LB защищены (HTTPS), в то время как связь между LB и app server по-прежнему использует HTTP
какова возможность включения HTTP / 2 с текущей настройкой? можем ли мы включить HTTP / 2 между браузером и LB в то время как связь между LB и серверами приложений остается на HTTP?
3 ответов
HAProxy 1.8 поддерживает HTTP / 2
HAProxy 1.8 теперь поддерживает HTTP/2 на стороне клиента (в разделах интерфейса) и может выступать в качестве шлюза между клиентами HTTP/2 и вашими приложениями HTTP/1.1 и HTTP / 1.0.
вам понадобится
haproxy еще не поддерживает http / 2
единственная поддержка, которую он имеет, - это обнаружение запроса http/2 и передача потока https / tcp443 tcp на сервер, который поддерживает https и http/2
вот чье-то руководство http://m12.io/blog/http-2-with-haproxy-and-nginx-guide
следующее должно работать на вашем балансировщике нагрузки, если вы можете запустить некоторые NginX
вместе с HaProxy
. NginX
is (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, start NginX
в слушайте на Port 81
как в конфиге
экземпляр для завершения HTTP/2
подключение и прокси-сервер его обратно к вашему loadbalancer снова.
в NginX обязательно:
использовать отправить-прокси-протокол в NginX
завершить SSL с помощью
HTTP/2
наNginX
-
прокси-все прозрачно (ака. тупой) назад к