Прокси-сервер Apache 2.4 AJP обслуживает несколько доменов с Tomcat 8

Я разработал три веб-приложения на основе Spring, которые были развернуты на моем сервере Tomcat 8. Я могу получить к ним доступ в локальной сети через доступ как:

http://localhost:8080/webapps1
http://localhost:8080/webapps2
http://localhost:8080/webapps3

что отлично работает для меня.

Коннектор Tomcat AJP был настроен как:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Теперь я попытался опубликовать все три приложения в Интернете, используя конфигурацию прокси-сервера apache 2.4 через коннектор AJP.

У меня также было зарегистрировано три FQDN, например:

www.thss.domain1.com.au
www.stoa.domain2.com.au
ozssc.stoa.domain2.com.au

Я протестировал эти три FQDN с помощью check-host.net, все они работают нормально.

Теперь я настрою свой apache 2.4, используя параметр виртуального хоста прокси, настрою имя файла как: apache-serviceproxy.conf в / Library / Server / Web / Config / Proxy.

......
listen 10.0.1.100:80
......
<VirtualHost 10.0.1.100:80>
  ProxyPreserveHost On
  ServerName www.thss.domain1.com.au
  ServerAlias thss.domain1.com.au
  ServerAdmin [email protected]
  ProxyPass / ajp://127.0.0.1:8009/webapps1/
  ProxyPassReverse / ajp://127.0.0.1:8009/webapps1/
</VirtualHost>
<VirtualHost 10.0.1.100:80>
  ProxyPreserveHost On
  ServerName www.stoa.domain2.com.au
  ServerAlias stoa.domain2.com.au
  ServerAdmin [email protected]
  ProxyPass / ajp://127.0.0.1:8009/webapps2/
  ProxyPassReverse / ajp://127.0.0.1:8009/webapps2/
</VirtualHost>
<VirtualHost 10.0.1.100:80>
  ProxyPreserveHost On
  ServerName ozssc.stoa.domain2.com.au
  ServerAdmin [email protected]
  ProxyPass / ajp://127.0.0.1:8009/webapps3/
  ProxyPassReverse / ajp://127.0.0.1:8009/webapps3/
</VirtualHost>

Обратите внимание: полное доменное имя 2 и 3 работает в одном домене (domain2.com.au), а полное доменное имя 1 - в другом домене (domain1.com.au).

Я тестировал через Интернет, используя net renderer.com, полное доменное имя 1 www.thss.domain1.com.au работает прекрасно, но полное доменное имя 2 и 3 не работает должным образом, я проверял свой журнал доступа tomcat и обнаружил, что кое-что очень интересно.

детали как:

Когда я получаю доступ к своему первому полному доменному имени (www.thss.domain1.com.au) из Интернета, запрос проходит через: Router -> Apache 2.4 (порт 80) -> AJP connector (8009) -> Tomcat 8.0.28 успешно, все страницы работает хорошо.

Журнал доступа Tomcat показывает:

58.106.1.75 - - [01/Nov/2015:09:37:40 +1100] "GET /webapps1/ HTTP/1.1" 200 2616
58.106.1.75 - - [01/Nov/2015:09:37:40 +1100] "GET /webapps1/css/thss_layout.css HTTP/1.1" 200 1405
58.106.1.75 - - [01/Nov/2015:09:37:40 +1100] "GET /webapps1/js/dojo-release-1.8.6/dojo/dojo.js HTTP/1.1" 200 158637

Это означает, что запрос html, включая запрос файла css / js, использует единый путь контекста / webapps1, что идеально.

Но когда я запрашиваю свое полное доменное имя 2 (www.stoa.domain2.com.au) и 3 (ozssc.stoa.domain2.com.au), только первый запрос приходит с правильным контекстным путем, таким как: / webapps2 любой следующий запрос на включая css и js или файл изображения - это двойной путь контекста, например: / webapps2 / webapps2, так как это плохо отформатированный путь контекста, ошибка 404 ответа Tomcat. В результате: все страницы с полными доменными именами 2 и 3 без поддержки css / js / image отображают только некоторый простой текст.

Журнал доступа показывает:

148.251.45.185 - - [01/Nov/2015:08:58:59 +1100] "GET /webapps2/ HTTP/1.1" 200 19098
148.251.45.185 - - [01/Nov/2015:08:59:00 +1100] "GET /webapps2/webapps2/dojo-release-1.10.4/dijit/themes/claro/claro.css HTTP/1.1" 404 1158
148.251.45.185 - - [01/Nov/2015:08:59:01 +1100] "GET /webapps2/webapps2/css/style.css HTTP/1.1" 404 1088
148.251.45.185 - - [01/Nov/2015:08:59:02 +1100] "GET /webapps2/webapps2/images/icons/search33.png HTTP/1.1" 404 1112

Мои вопросы: как я могу настроить свой прокси с помощью AJP, не добавляя этот дублированный контекстный путь перед запросом от apache 2.4 к tomcat через коннектор AJP?

Любые советы приветствуются!

Хороших выходных! Приятель


person cidy.long    schedule 31.10.2015    source источник
comment
Спасибо, я хорошо посмеялся: «Хороших выходных, дружище!» ... Но если все же запустить в защищенном режиме ;-)   -  person Marged    schedule 01.11.2015
comment
Ха. Защищенный режим??   -  person cidy.long    schedule 01.11.2015


Ответы (1)


Не меняйте путь контекста в директиве ProxyPass. Есть много-много способов выстрелить себе в ногу, когда вы это сделаете.

Предположительно, ссылки на ваших страницах являются абсолютными, поэтому они включают контекстный путь. Когда клиент затем запрашивает их, директива ProxyPass снова добавляет путь контекста.

Самое простое решение - настроить Tomcat для виртуального хостинга и развернуть каждое из ваших приложений как веб-приложение ROOT на собственном виртуальном хосте.

person Mark Thomas    schedule 02.11.2015
comment
Привет. Отметка. Большое тебе спасибо! Я сделал то, что вы сказали, чтобы настроить tomcat, используя параметр виртуального хостинга tomcat, чтобы включить все три моих приложения в Интернете. Но поскольку я буду использовать SSL позже, чтобы позволить нашему клиенту войти в свою учетную запись, я все равно предпочту использовать Apache - ›AJP-› tomcat, поскольку apache намного лучше использует SSL, чем tomcat. - person cidy.long; 02.11.2015