2016-02-29 4 views
1

Вот базовая архитектура я в настоящее время используют для доставки доступа к веб-приложению (AngularJS на переднем конце - JEE-JAX-RS для фоновым REST API):Можем ли мы использовать Apache для доставки HTTP/2-соединения для сервера приложений Java?

Client -> Apache -> Сервер приложений (Контейнер Java - ex. Tomcat)

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

По-видимому, HTTP/2 будет доступен только в JEE8 (Servlet v4), что означает, что он не будет доступен в решении, таком как Weblogic, до loooong time.

На самом деле у меня есть два вопроса:

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

ответ

4

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

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

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

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

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

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

  1. Вы можете активировать mod_http2 так, чтобы браузер и Apache будет связываться через HTTP/2, но вы можете потерять HTTP 2 Нажмите /. Однако связь с бэкэнд будет использовать HTTP/1.1. Это будет работать, но это не оптимальное развертывание HTTP/2.
  2. Вы будете не выгоду от любого преимущества HTTP/2 в связи между клиентом и бэкэнд, если часть сообщения не находится в HTTP/2.
+0

Большое спасибо за ответ. Это именно то, что мне нужно. Я буду рад использовать такое решение, как Jetty, к сожалению, я сейчас застрял в Weblogic (корпоративное решение). –

2

Да, вы можете активировать 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 раскомментировать строку - включают в себя /extra/httpd-ssl.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.

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

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

+0

Спасибо, что поделились своим опытом по этой теме. Я весьма признателен. –

+0

Спасибо за вашу оценку. Пожалуйста, попробуйте вышеуказанные шаги, и если вы найдете какие-либо трудности, поделитесь им. –

+1

Вы уверены, что вы указали ссылку? Кажется, речь идет о «Apache 2 с Tomcat 6», которые устарели и никогда не слышали о http/2 :) – yglodt