Мы запускаем около 30 веб-приложений на различных экземплярах Tomcat за балансировщиками нагрузки и обратными прокси-серверами Apache, используя mod_jk. Общедоступный URL-адрес каждого приложения настраивается в конфигурации Apache mod_jk, которая проксирует серверные Tomcats. Серверная часть Tomcat запускает приложение по пути контекста, который соответствует общедоступному URL-адресу.
e.g.
domain.com/foo/bar/webapp -- mod_jk --> tomcat/foo/bar/webapp
Это связано с тем, что приложения создают ссылки в JSP, используя ${pageContext.request.contextPath}
, например.
<script src="${pageContext.request.contextPath}/resources/js/image-manipulation.js" > </script>
Я хотел бы сделать это более слабо связанным и «контейнеризировать» веб-приложения, чтобы каждое из них запускалось в своем собственном контейнере Tomcat в контексте по умолчанию, то есть /
, без необходимости знать, каков их общедоступный URL-адрес. Это упростило бы управление конфигурацией Tomcat и отображениями mod_jk.
Проблема в том, как приложение может создавать абсолютные ссылки внутри себя, не зная, каков его конечный общедоступный URL-адрес? Есть ли способ передать URL-адрес в запросе mod_jk и заставить Tomcat переопределить вызовы ${pageContext.request.contextPath}
с помощью этого URL-адреса?
Или лучше использовать что-то вроде mod_substitute
в Apache, чтобы заменить фиксированную строку на странице URL-адресом, когда он выходит из Apache? Это кажется неэффективным, поскольку Apache должен затем сканировать все страницы, выполняющие поиск и замену.
Или лучше просто оставить все как есть и использовать контекстный путь как сейчас?