|
今天帮现场实施处理Tomcat + Apache2.2部署问题,在这里记录一下请求转发的配置:
参考下面这篇文章,我使用的是最简单的mod_proxy方式来配置, 这种方式只需要修改apache的配置文件即可
http://21nw.com/wap/index-wap2.php?p=10800
服务器环境:
- Apache Httpd 2.2, IP地址: 10.2.1.18:9090
(80端口被Plone占用)
- Tomcat 6.0, IP地址: 10.2.1.104:8080
- 操作系统: 两台机器都是WinXp
- 待转发的项目名称: biandan_bj
, 这样直接访问tomcat的地址是: http://10.2.1.104
:8080/biandan_bj
配置说明:
- 修改Apache\conf
目录下的 httpd.conf 文件, 去掉如下两行的注释 (前面的 “#”字符):
#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,因此出错。
P.S:配置方法的弊端
这种代理方式有一个很致命的问题。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> |
|
|