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 на собственном виртуальном хосте.