第一次集成Apache、Tomcat,在网络上差了很多资料,然后按着资料配置
环境说明:
两台window2003服务器
httpd-2.2.15-win32-x86
jakarta-tomcat-5.0.28
mod_jk-1.2.27-httpd-2.2.10.so
在Apache的httpd.conf文件最后面加上include conf/mod_jk.conf
在httpd.conf同目录下新建mod_jk.conf文件,内容如下:
- ### 加载 mod_jk 模块
- LoadModule jk_module modules/mod_jk-1.2.27-httpd-2.2.10.so
- ### 配置 mod_jk
- JkWorkersFile conf/workers.properties
- #加载workers的请求处理分配文件
- #JkMountFile conf/uriworkermap.properties
- #指定jk的日志输出文件
- JkLogFile logs/mod_jk.log
- #指定日志级别
- JkLogLevel info
- #日志记录的格式
- JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
- # 请求分发配置,可以配置多项
- #JkMount /*.jsp controller
- #JkMount /*.shtml controller
- JkMount /* controller
- # 关掉主机Lookup,如果为on,很影响性能,可以有10多秒钟的延迟。
- HostnameLookups Off
在httpd.conf同目录下新建workers.properties文件,内容如下:
- # worker列表
- worker.list=controller,s1,s2
- #第一个server的配置,server名为s1
- #ajp13 端口号,在tomcat下server.xml配置,默认8009
- worker.s1.port=8009
- #tomcat的主机地址,如不为本机,请填写ip地址
- worker.s1.host=192.168.0.109
- worker.s1.type=ajp13
- #server的加权比重,值越高,分得的请求越多
- worker.s1.lbfactor=1
- #第二个server的配置,server名为s2
- worker.s2.port=8009
- worker.s2.host=192.168.50.129
- worker.s2.type=ajp13
- worker.s2.lbfactor=1
- #重试次数
- worker.retries=3
- #========controller,负载均衡控制器========
- worker.controller.type=lb
- #指定分担请求的tomcat
- worker.controller.balanced_workers=s1,s2
- #设置用于负载均衡的server的session可否共享 网上大部分文章都是说设置为1
- #也有网友说自己设置为1死活就是不能自动分配服务,设置为0 可以
- #worker.controller.sticky_session=0
- worker.controller.sticky_session=1
- #我配置为1时,同一个session只会访问一个tomcat关掉浏览器,重新打开,才会访问另外一个tomcat
- #worker.controller.sticky_session=false控制的是session是否粘性,
- #如果设置为true,session为 粘性,同一个请求将在同一台tomcat上处理,一般设置为 false;
- #worker.controller.sticky_session=false
接下来是修改Tomcat
修改server.xml
在一个tomcat上的<Engine name="Catalina" defaultHost="localhost">中加上 jvmRoute="s1"
成为<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">
另外一个tomcat为<Engine name="Catalina" defaultHost="localhost" jvmRoute="s2">
然后去掉 <Cluster 注释,实现资源共享
仅此还不够,要在项目的web.xml中加上<distributable/>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
- <display-name>Welcome to Tomcat</display-name>
- <description>Welcome to Tomcat</description>
- <distributable/>
这样Apache Tomcat就实现了负载均衡集成。
以上是按照网络上的资料部署,经测试发现apache唯一做的事就是接收所有请求,再转给tomcat处理,这样就摒弃了apache处理静态页面的能力。
经过研究后将上面的配置按以下修改
修改mod_jk.conf文件,
将JkMount /* controller注释掉,改为
#按照自己的项目情况
JkMount /*.jsp controller
JkMount /*.shtml controller
然后再重启运行项目,发现jsp页面的图片都没有显示,说明静态页面元素apache自己处理了,之所以图片不显示,是因为我们没有给apache指定项目目录
修改httpd.conf文件
将DocumentRoot "D:/Apache2.2/htdocs"改为项目的路径DocumentRoot "D:/cms"
还有<Directory "D:/Apache2.2/htdocs">也同样需要修改
如果不想apache列出文件列表
将Options Indexes FollowSymLinks的Indexes去掉,为Options FollowSymLinks
完毕,再测试,发布页面出现乱码,tomcat的server.xml与apache连接器上加上编码
- <Connector port="8009" enableLookups="false" edirectPort="8443" debug="0" protocol="AJP/1.3" URIEncoding="utf-8"/>
再测,暂无再出现问题。