原理
tomcat为一个jsp的容器,apache为
一个web server,两者之间通信通过
worker进行(由Tomcat使用
Server.xml文件中Connector的标签
来定义其端口和协议),通过mod_jk
的模块(由web服务器像apache、
iis等使用)和Web Server通信。
通信协议有很多,其中jk2已经被抛
弃了,现在就用jk就好了。
整个过程其实就是让apache的
httpd.conf文件调用mod_jk.conf,
mod_jk.conf调用
workers.properties,最后配置虚
拟主机。
文件说明
mod_jk.conf
主要定义mod_jk模块的位置以及
mod_jk模块的连接日志设置,还有定
义worker.properties文件的位置。
worker.properties
定义worker的参数,主要是连接
tomcat主机的地址和端口信息。如果
Tomcat与apache不在同一台机器上
,或者需要做多台机器上tomcat的负
载均衡只需要更改
workers.properties文件中的相应
定义即可。
第一部分:安装配置tomcat apache
mod_jk j2sdk
准备下载下列文件
Jdk1.4.2_08(1.5也可以,把JRE装
在JDK目录下)
下载地址: http://java.sun.com
tomcat 5.0.28
下载地址:
http://jakarta.apache.org
apache 2.0.53
下载地址:
http://httpd.apache.org
mod_jk-1.2.10-apache-2.0.53.so
(根据Apache版本决定)
下载地址:
http://archive.apache.org/dist/
jakarta/tomcat-connectors/
把上面所有组件都安装到D:/Server
目录下,这样也方便日常管理配置和
将来移植到别的服务器上去。
1:安装j2sdk
安装到 D:/server/j2sdk/ 目录下
,注意安装成系统服务
2: 安装tomcat
安装到D:/server/tomcat/目录下,
注意安装成系统服务
可能遇到的问题
问题1: 在解析JSP页面时,提示无法
找到java compiler
请拷贝 j2sdk/lib/tools.jar 到
tomcat/common/lib下面。
使用tomcat作为service启动后总是
这样,当然用startup.bat脚本启动
倒是完全正常。主要原因分析起来是
以service方式启动的Tomcat无法读
取JAVA_HOME 和CLASS_PATH等环境
变量。
问题2:如何解决通过服务方式启动
tomcat时log中提示
ZoneInfo:d:/server/j2sdk/lib/zi
/ZoneInfoMappings(系统找不到指
定的路径。)
从d:/server/j2sdk/jre/lib目录拷
贝所有文件放到
c:/program */java/jre*/lib
3:安装apache 到 d:/server/ (
会自动生成apache2文件夹)
配置 index.jsp 为默认页 配置
GB2312为默认语言
不只Apache的httpd.conf中定义了
默认页面文件,连Tomcat的web.xml
配置文件的结尾处也定义了默认页面
文件,而且Tomcat中定义的的优先级
还高于原有的Apache中所定义的默认
页。
4:加入mod_jk连接模块
拷贝 mod_jk-1.2.10-apache-
2.0.53.so 到d:/server/apache2
/modules/ 改名为mod_jk.so
5: 修改apache的配置文件
为了保持httpd.conf文件的简洁,把
jk模块的配置放到单独的文件中来,
就在httpd.conf中增加一行调用
include D:/server/Apache2
/conf/mod_jk.conf
6:配置mod_jk.conf
请注意使用绝对路径
其实最关键的就是 第一条 第二条
和最后一条,如果要精简,就保留这
三条内容就可以了。
# Load mod_jk module
LoadModule jk_module
modules/mod_jk.so
# Where to find
workers.properties
JkWorkersFile
conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level
[debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat /"[%a %b %d %
H:%M:%S %Y] /"
# JkOptions indicate to send
SSL KEY SIZE,
JkOptions +ForwardKeySize
+ForwardURICompat -
ForwardDirectories
# JkRequestLogFormat set the
request format
JkRequestLogFormat /"%w %V %T/"
# Send servlet for context
/examples to worker named ajp13
#JkMount /servlet/* ajp13
# Send JSPs for context
/examples to worker named ajp13
JkMount /*.jsp ajp13
上面这一行我们设置了了 /*.jsp
ajp13 就是说把所有.jsp结尾的文件
都由ajp13这个worker交给tomcat处
理了,如果应用被映射为一个.do的
URL,这样就会出错.解决方法是再添
加如下一行:
JkMount /*.do ajp13
7:配置apache2
/conf/workers.properties
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost #本
机,若上面Tomcat主机不为
localhost,作相应修改
worker.ajp13.type=ajp13 #类型
worker.ajp13.lbfactor=1 #代理数
,不用修改
第二部分:虚拟主机的配置
举例配置2个vhost网站 一个是
localhost ,另一个是 www.ok.com
当然www.ok.com 是虚拟的,本地测
试时,应该修改系统中的hosts文件
,添加一行 127.0.0.1 www.ok.com
1:Apache 虚拟主机配置:
Httpd.conf文件最后添加
include D:/server/Apache2
/conf/vhost.conf
而vhost.conf内容写
NameVirtualHost *:80
ServerAdmin webmaster@localhost
DocumentRoot
/"D:/server/Tomcat/webapps/ROOT
/"
ServerName localhost
ErrorLog logs/localhost-
error_log
CustomLog logs/localhost-
access_log common
ServerAdmin webmaster@dummy-
host.example.com
DocumentRoot D:/server/www/
ServerName www.ok.com
ErrorLog logs/ok.com-error_log
CustomLog logs/ok.com-
access_log common
# 这样我可以看到apache服务器状态
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
Allow from www.ok.com
2:Tomcat虚拟主机配置
添加新的www.ok.com 虚拟主机,在
tomcat安装路径/conf/server.xml
的最后,找到
debug=/"0/" appBase=/"D:/server/www//" unpackWARs=/"true/" autoDeploy=/"true/" xmlValidation=/"false/" xmlNamespaceAware=/"false/"> docBase=/"./" /> className=/"org.apache.catalina .logger.FileLogger/" directory=/"logs/" prefix=/"ok.com_log./" suffix=/".txt/" timestamp=/"true/" />
3:测试虚拟主机效果
访问http://localhost/ 应该可以
看到原来的tomcat默认页面。
写一个 index.jsp
);%>
放在d:/server/www下面,访问
http://www.ok.com
页面显示Hello World! 就成功了
第三部分,部分相关性能优化及其它
问题
如何使用server版jvm ?
Jvm动态库有client和server两个版
本,分别针对桌面应用和服务器应用
做了相应的优化,client版本加 载
速度较快,server版本加载速度较慢
但运行起来较快。
在开始菜单 tomcat5 ->tomcat
config的java属性中 有一项 jvm路
径 指向server目录下的jvm就行了。
更改默认java.exe调用的jvm.dll,
这个由jvm.cfg决定。
编辑%JAVA_HOME%/jre/lib/i386
/jvm.cfg
里面第一行写的是 -client 默认就
是client版本 ,把第二行的-
server KNOWN 放到第一行, 如下
面所示
-server KNOWN
-client KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR
改完保存,然后看看默认版本:
C:/java -version
java version /"1.4.2_07/"
Java(TM) 2 Runtime
Environment, Standard Edition
(build 1.4.2_07-b05)
Java HotSpot(TM) Server VM (
build 1.4.2_07-b05, mixed mode
)
关于JAVA_HOME 与CATALINA_HOME、
CLASSPATH
ClassPath 网上有人说在j2sdk1.3
开始就不需要配置了,而本例中实际
是不需要配置JAVA_HOME和
CATALINA_HOME的,因为tomcat 以
service模式启动根本不认你的
java_home,当然为了让你能够在命
令行运行startup.bat时也能顺利启
动Tomcat,可以配置也建议配置上
JAVA_HOME 与CATALINA_HOME,
ClassPath就免了吧,连Resin都不
需要这个了。
有关路径设置
Path=d:/server/jdk/bin;…… 放
到最前,避免有多个jdk时的很多问
题
关于apache2在win平台上的一个小问
题
可能apache的日志中常出现类似如下
的提示
[error] (730038)An operation
was attempted on something that
is not a socket.: winnt_accept:
AcceptEx failed. Attempting to
recover.
这是由于apache 使用了微软的
AcceptEx()调用的缘故,禁用掉即
可,此问题只会出现在win平台且
apache的2.0.49和更高版本上,出
现错误的大概原因是防火墙和防病毒
软件所导致,导致结果也有好几种,
像apache占用很高cpu资源或者网站
页面无法打开。
解决方法修改d:/server/apache2
/conf/httpd.conf中的mpm部分
ThreadsPerChild 250
MaxRequestsPerChild 0
Win32DisableAcceptEx #添加这
一行即可,做过压力测试,对性能影
响很小,可以忽略
Generated by Bo-blog 2.0.2 sp2