今天帮现场实施处理Tomcat + Apache2.2部署问题,在这里记录一下请求转发的配置:
参考下面这篇文章,我使用的是最简单的mod_proxy方式来配置, 这种方式只需要修改apache的配置文件即可
http://21nw.com/wap/index-wap2.php?p=10800
#LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyPass /biandan_bj http://10.2.1.104:8080/biandan_bj ProxyPassReverse /biandan_bj http://10.2.1.104:8080/biandan_bj
配置完成后访问: http://10.2.1.18:8080/biandan_bj 即可将请求转发到 10.2.1.104的 tomcat 上
注意:
ProxyPass 和 ProxyPassReverse 必须成对出现,否则在页面跳转时会从10.2.1.18转到10.2.1.104上。现场实施只配了ProxyPass,因此出错。
这种代理方式有一个很致命的问题。jsp中不能使用根据request获取的绝对路径,必须使用当前页的相对路径,例如eclipse创建jsp页面是会自动生成如下代码:
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
这里的path和basePath都不能使用。通过request获取的ServerName是tomcat主机的ip/hostname。如果采用如下方式引入资源,肯定会造成资源无法访问的问题:
<link rel="stylesheet" href="<%=path%>/css/dy-ui.css"> <script type="text/javascript" src="<%=path%>/js/preTaskList.js"></script>