Как включить HTTP / 2 на HAProxy?

недавно мы перешли с HTTP на HTTPS. Поскольку мы уже перешли на HTTPS, мы думаем о переходе на HTTP / 2, чтобы получить преимущества производительности.

enter image description here

как объяснялось выше, что запросы между браузером и LB защищены (HTTPS), в то время как связь между LB и app server по-прежнему использует HTTP

какова возможность включения HTTP / 2 с текущей настройкой? можем ли мы включить HTTP / 2 между браузером и LB в то время как связь между LB и серверами приложений остается на HTTP?

3 ответов


HAProxy 1.8 поддерживает HTTP / 2

С в 1.8 объявлении:

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 обязательно: