在网上找了一些文档,还是觉得不是很清楚,自己走了些弯路,才把这个配置好,还是写下来吧,以备后查。
1.
目标
使用
apache
和
tomcat
配置一个可以应用的
web
网站,要达到以下要求:
1、
Apache
做为
HttpServer
,后面连接多个
tomcat
应用实例,并进行负载均衡。
2、
为系统设定
Session
超时时间,包括
Apache
和
tomcat
3、
为系统屏蔽文件列表,包括
Apache
和
tomcat
2.
安装
tomcat
2.1.
下载,解压
tomcat
不要下载安装版
,
下载地址
http://tomcat.apache.org/
2.2.
配置
tomcat
2.2.1.
配置
server
的关闭口
我们需要在一台机器上跑
2
个不同的
tomcat
,需要修改不同的
tomcat
的关闭口,避免出现端口被占用的情况。在
server.xml
中找到
server,
将:
<Server port="8005" shutdown="SHUTDOWN">
改为
<Server port="XXXX" shutdown="SHUTDOWN">
XXXX
在这里表示不同的端口:我的两个
tomcat
分别使用
8035
,
8045
注意:这里之所以要配置不同的
tomcat
关闭口,只是因为我们使用了多个
tomcat
,其实用一个
server
多个实例也可以。
2.2.2.
配置
service
我们需要对不同的
tomcat
的
service
取不同的名字,在
server.xml
中找到:
<Service name="Catalina">
改为:
<Service name="XXXX">
两个
service
分别为
tomcat6
和
tomcat5
2.2.3.
配置
Connector
这个部分主要是要改两个
Connector
,当然前提是你的
tomcat
只有两个
Connector
。
修改
ajp1.3
的端口:
找到:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改为:
<Connector port="XXXX" protocol="AJP/1.3" redirectPort="8443" />
两个
Service
的
ajp/1.3
的端口分别为:
8019
,
8029
修改
http
的端口:
找到:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />
改为:
<Connector port="XXXX" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />
两个
Service
的
ajp/1.3
的端口分别为:
8060
,
8070
2.2.4.
配置
Engine
Engine
主要是配置
jvmRoute
属性,找到:
<Engine name="Catalina" defaultHost="localhost">
改为:
<Engine jvmRoute="XXXX" name="Catalina" defaultHost="localhost">
两个实例分别为:
tomcat6
和
tomcat5.
2.2.5.
配置公用性
Context
如果有
Context
是多个系统公用的,比如图片等的存放地,可以做个配置:
在
Host
中增加:
<Context path="/image" docBase="D:\webRoot\image" debug="0" reloadable="false" crossContext="true">
</Context>
2.2.6.
屏蔽文件列表
打开
tomcat
目录下的
conf/web.xml
,
找到:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
将
listings
参数改为
false;
2.3.
配置应用
(web.xml)
对系统应用做些控制。
配置
session
过期时间,大多数网站用户都只是做些浏览性的操作,为了减轻服务器负载压力,我们将
session
超时时间从默认的
30
分钟变为
5
分钟。
在
web
应用程序的
web.xml
中
servlet-mapping
之后增加如下一段:
<session-config>
<session-timeout>5</session-timeout>
</session-config>
3.
安装
Apache
3.1.
下载、安装
Apache
下载地址
http://httpd.apache.org/download.cgi
下载后点击安装
msi
文件。
安装的时候没有什么特别需要注意的地方,按照默认就行了。是否安装为
service
看具体情况而定。
3.2.
下载、安装
Apache
、
tomcat
的
Connector
http://tomcat.apache.org/download-connectors.cgi
注意,很多网站上都介绍是
JK2
,可能是觉得
JK2
比
JK
要新吧,其实
JK2
已经停止研发了,建议使用
jk1.2
。
下载压缩包,之后将
module
目录中的
mod_jk-apache****.so
文件放入
/module/
目录下。
3.3.
配置
Apache
(
httpd.conf
)
3.3.1.
配置端口:
找到
Listen 80
改为
Listen **
当然如果不需要改的话,就不用改了。正常情况无须更改。
3.3.2.
配置
DocumentRoot
找到
DocumentRoot
段,将其改为:
DocumentRoot "E:/MyWebsite"
这里的
"E:/MyWebsite"
指的是你的
web
程序的根路径,视具体应用而定。
3.3.3.
配置
serverName
找到
serverName
这个段,将其配置为你的
ServerName
如果没有配置为域名,配为
IP
也可以,此处还不是很清楚,多虚拟主机的情况的配置。
3.3.4.
配置虚拟主机
<VirtualHost *:80>
ServerAdmin flyffa@gmail.com
DocumentRoot E:/MyWebsite
ServerName localhost
DirectoryIndex index.html index.htm index.jsp
ErrorLog logs/error_log
CustomLog logs/access_log common
ErrorDocument 404 /sys/logon.jsp
</VirtualHost>
3.4.
配置
JK
方式的负载均衡
3.4.1.
配置
module
我们需要与
tomcat
做连接,所以要把
tomcat
的
connector
的模块配置进去。
在
LoadModule
部分加入:
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
-加载模块
(根据网友于伟的建议,补上一段,mod_jk的版本会根据大家下载的版本不同,有不同的名字,请大家注意)
这个
so
是我下载的版本,个人可以根据自己下载的文件名加以配置
JkWorkersFile conf/workers.properties
-指定
connector
的配置文件名称
JkLogFile logs/mod_jk.log
-指定
connector
的日志文件名称
JkLogLevel info
-指定
connector
的日志等级
3.4.2.
配置
worker
列表
(conf/workers.properties)
定义列表
worker.list=tomcat6,tomcat5,loadbalancer
定义一个名为
“loadbalancer”
的
worker
其作为对多个
Tomcat
进程的负载平衡使用:
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat5, tomcat6
(
负载平衡类型的
worker
并不与
Tomcat worker
通讯,它负责管理这些
Tomcat worker
。
)
定义多个
worker
列表
# Set properties for tomcat6 (ajp13)
worker.tomcat6.type=ajp13
worker.tomcat6.host=localhost
worker.tomcat6.port=8019
worker.tomcat6.lbfactor=50
worker.tomcat6.cachesize=10
worker.tomcat6.cache_timeout=600
worker.tomcat6.socket_keepalive=1
worker.tomcat6.reclycle_timeout=300
# Set properties for tomcat5 (ajp13)
worker.tomcat5.type=ajp13
worker.tomcat5.host=localhost
worker.tomcat5.port=8029
worker.tomcat5.lbfactor=50
worker.tomcat5.cachesize=10
worker.tomcat5.cache_timeout=600
worker.tomcat5.socket_keepalive=1
worker.tomcat5.reclycle_timeout=300
注意:
lbfactor=
50
(
当此
Tomcat worker
被用于一个负载平衡
worker
使用时,此属性将被使用。它定义了此
worker
的负载平衡权值。
)
cachesize=
10
(
当在多线程的
web server
(例如
apache2.0
、
IIS
、
Netscape
)中使用
JK
时,此属性是有效的。如果将
cachesize
的值设置为较高的值,这些支持多线程的
web server
将获得很好的处理能力。如果此属性不被设置,则连接
cache
特性将失效。
)
3.4.3.
配置
Apache
到
tomcat
的桥接
在
DocumnetRoot
片段下加入
JkMount /*.jsp tomcat6
JkMount /*.do tomcat6
JkMount /*Servlet tomcat6
这里只是简单的将
apache
的请求转到其中的一个
tomcat
中,形成桥接,至于负载均衡的时候,就无须进行这步操作,直接启动负载均衡。启动负载均衡见下一节。
3.4.4.
启动负载均衡
在
DocumnetRoot
片段下加入
JkMount /*.jsp loadbalancer
JkMount /*.do loadbalancer
JkMount /*Servlet loadbalancer
-指定对所有的请求启动负载均衡,这里的
loadbalancer
是定义的
worker
的名字
这里我在配置的时候犯了两个错误:
第一是没有配置
JkWorkersFile conf/workers.properties
,以为
Apache
会自动认识(其实
apache
是自动产生了一个叫做
ajp13
的
worker
,指向本机的
8009
端口)。
第二是以为
JkMount
语句中出现
loadbalancer,ajp13
之类的是系统设定的东西,其实都是在
workers.properties
文件中定义的,结果出现名字不匹配的情况。后来配置了
JkLogFile logs/mod_jk.log
之后看到错误日志才明白。
3.5.
配置
Proxy
方式的负载均衡
使用
Apache2.1
以上的版本,就可以用
mod_proxy_ajp
来完成负载均衡的配置,不过到目前为止,没有看到如何让
Apache
负责静态部分,
tomcat
负责动态部分的配置方式,只能用
path
进行区分分发请求。如:在虚拟主机的配置中增加:
ProxyPass / ajp://localhost:8019/
ProxyPassReverse / ajp://localhost:8019/
而形如:
ProxyPass /*.jsp ajp://localhost:8019/
ProxyPassReverse /*.jsp ajp://localhost:8019/
这样的配置是不能通过的。
请高手指教。