我們使用mod_jk在負載均衡器和Apache反向代理後面的各種Tomcat實例上運行約30個webapps。每個應用程序的公共URL被配置到代理後端Tomcat的Apache mod_jk配置中。後端Tomcat在與公共URL匹配的上下文路徑上運行應用程序。僞造/設置Tomcat上下文路徑
例如
domain.com/foo/bar/webapp -- mod_jk --> tomcat/foo/bar/webapp
這是因爲應用程序中使用${pageContext.request.contextPath}
,例如建立在JSP的鏈接
<script src="${pageContext.request.contextPath}/resources/js/image-manipulation.js" > </script>
我想使這更鬆耦合和「containerise」的web應用,讓他們在自己的Tomcat容器每次運行,在默認情況下,即/
而不需要知道他們的公共網址是。這將簡化管理Tomcat配置和mod_jk映射。
問題是應用程序如何構建絕對鏈接到本身,而不知道它的最終公共URL是什麼?有沒有辦法在mod_jk請求中傳遞URL,並讓Tomcat使用此URL覆蓋對${pageContext.request.contextPath}
的調用?
還是在Apache中使用類似mod_substitute
的東西時更好一點,即在頁面出現在Apache中時使用URL替換頁面中的固定字符串?這看起來效率不高,因爲Apache必須掃描所有頁面,然後才能找到&替換。
或者最好只是將它全部保留原樣,並使用上下文路徑作爲當前?