Apache 2.4 AJP Proxy обслуживает несколько доменов с 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.

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

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 admin@domain1.com.au
  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 admin@domain1.com.au
  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 admin@domain1.com.au
  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) из Интернета, запрос проходит через: Маршрутизатор -> Apache 2.4 (порт 80) -> Соединитель AJP (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, так как это неправильно отформатированный контекстный путь, ошибка ответа Tomcat 404. В результате: все страницы FQDN 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-коннектор?

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам