Можем ли мы использовать Apache для доставки HTTP/2-соединения для сервера приложений Java?

Вот базовая архитектура, которую я в настоящее время использую для предоставления доступа к веб-приложению (AngularJS на внешнем интерфейсе - JEE-JAX-RS для внутреннего REST API):

Клиент -> Apache -> Сервер приложений (контейнер Java — например, tomcat)

Браузер клиента подключается к приложению через HTTPS (обрабатывается Apache), а Apache перенаправляет соединение в контейнер Java (я использую Oracle Weblogic). Все работает нормально. Но теперь я хотел бы использовать HTTP/2.

Судя по всему, HTTP/2 будет доступен только в JEE8 (Servlet v4), что означает, что он не будет доступен в таких решениях, как Weblogic, в ближайшее время.

Собственно у меня два вопроса:

  1. Могу ли я просто активировать Apache mod_http2 и настроить свой интерфейс (AngularJS) для связи в HTTP/2, или также необходимо, чтобы мой сервер приложений мог обрабатывать HTTP/2?
  2. Если Apache получает соединение в HTTP/2 и перенаправляет его в контейнер Java через HTTP/1.1 или AJP, буду ли я по-прежнему пользоваться всеми преимуществами HTTP/2, даже если часть соединения не в HTTP/2?

person Nicolas Forney    schedule 29.02.2016    source источник


Ответы (3)


Apache (и Nginx) в настоящее время не имеют возможности работать в режиме резервного прокси и обмениваться данными с серверной частью с использованием HTTP/2.

Когда у вас есть такая «смешанная» связь (браузер с Apache в HTTP/2 и Apache с серверной частью в HTTP/1.1 или AJP), вы теряете ряд оптимизаций, которые дает HTTP/2, в частности, мультиплексирование и HTTP/2 push, а не упомянуть накладные расходы из-за перевода запроса с HTTP/2 на HTTP/1.1 и наоборот.

HTTP/2 уже доступен в мире Java: Jetty (я руководитель Jetty HTTP/2), Undertow и Netty уже обеспечивают прозрачную поддержку HTTP/2, так что вы просто развертываете приложение JEE, включаете HTTP/2, и все готово.

Из-за этих ограничений Apache и Nginx в настоящее время мы рекомендуем использовать HAProxy перед Jetty (как объяснено в деталях здесь). Эта конфигурация даст вам максимальные преимущества для HTTP/2: быстрая разгрузка TLS, выполняемая HAProxy, мощная балансировка нагрузки, очень эффективная связь с серверной частью (без перевода на HTTP/1.1), с HTTP/2 везде и, следовательно, со всеми его преимуществами.

Jetty также предлагает механизм автоматической отправки HTTP/2, который мне недоступен. знания, в Apache или Nginx.

Специально для ваших вопросов:

  1. Вы можете активировать mod_http2, чтобы браузер и Apache обменивались данными через HTTP/2, но вы можете потерять HTTP/2 Push. Однако для связи с серверной частью будет использоваться HTTP/1.1. Это будет работать, но это не оптимальное развертывание HTTP/2.
  2. Вы не воспользуетесь преимуществом HTTP/2 при обмене данными между клиентом и серверной частью, если часть обмена данными не будет осуществляться по протоколу HTTP/2.
person sbordet    schedule 29.02.2016
comment
Большое спасибо за ответ. Это именно та информация, которая мне была нужна. Я буду рад использовать такое решение, как Jetty, к сожалению, в настоящее время я застрял с Weblogic (корпоративное решение). - person Nicolas Forney; 01.03.2016

Да, вы можете активировать mod_http2 в файле httpd.conf в папке Apache24/conf. Вам также необходимо включить следующие модули: 1. mod_log_config 2. mod_setenvif 3. mod_ssl 4. socache_shmcb_module Вы должны включить файл httpd-ssl.conf в свой файл httpd.conf, раскомментировав строку -- include /extra/httpd- ssl.conf Включите сертификат и ключ в папку conf и укажите пути к ним в файле https-ssl.conf Вышеуказанные шаги позволят включить HTTP/2 в Apache 2.4.

Вы можете включить HTTP/2.0 для своего Java-приложения, размещенного на Tomcat, установив Tomcat-9. Tomcat-9 поддерживает HTTP/2.0 и сервисы push-уведомлений сервера.

Вы можете перенаправить свои запросы с Apache 2.4 на Tomcat 9, следуя инструкциям по ссылке ниже https://www3.ntu.edu.sg/home/ehchua/programming/howto/ApachePlusTomcat_HowTo.html

Используя эти шаги, вы можете включить HTTP/2.0 для работы между клиентским браузером, Apache и вашим Java-приложением. Таким образом, вы получите все преимущества HTTP/2.0.

Я уже реализовал все вышеперечисленные шаги в своем Проекте и получаю полное вознаграждение за высокую производительность в общении.

Если у вас есть какие-либо сомнения, вы можете оставить свои комментарии здесь.

person Dhumil Agarwal    schedule 03.03.2016
comment
Спасибо, что поделились своим опытом по этой теме. Я действительно ценю. - person Nicolas Forney; 03.03.2016
comment
Спасибо за вашу оценку. Пожалуйста, попробуйте описанные выше шаги, и если вы обнаружите какие-либо трудности, поделитесь ими. - person Dhumil Agarwal; 04.03.2016
comment
Вы уверены в предоставленной ссылке? Кажется, речь идет об Apache 2 с Tomcat 6, которые устарели и никогда не слышали о http/2 :) - person yglodt; 21.12.2016

HTTP/2 также доступен в Tomcat 8.5.

person Henri Gomez    schedule 02.08.2016