Apache与Tomcat的安装与整合

Apache和Tomcat的整合,原理及例子 

原理 
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目录拷贝所有文件放到 d:\server\j2sdk\lib\ ,jre\lib 中的文件和j2sdk\lib\ 中的文件没有一个重复的,不用担心会覆盖掉j2sdk\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 
<VirtualHost *:80> 
ServerAdmin webmaster@localhost 
DocumentRoot \"D:/server/Tomcat/webapps/ROOT\" 
ServerName localhost 
ErrorLog logs/localhost-error_log 
CustomLog logs/localhost-access_log common 
</VirtualHost> 

<VirtualHost *:80> 
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 
<Location /server-status>           # 这样我可以看到apache服务器状态 
SetHandler server-status 
Order deny,allow 
Deny from all 
Allow from localhost 
Allow from www.ok.com 
</Location> 
</VirtualHost> 

2:Tomcat虚拟主机配置 
添加新的www.ok.com 虚拟主机,在tomcat安装路径\conf\server.xml的最后,找到<Engine>段,改为 

<Engine> 
<Host name=”localhost” ……> 
</Host> 

<Host name=\"www.ok.com\" debug=\"0\" appBase=\"D:/server/www/\" unpackWARs=\"true\" autoDeploy=\"true\" xmlValidation=\"false\" xmlNamespaceAware=\"false\"> 
<Context path=\"\" docBase=\".\" /> 
<Logger className=\"org.apache.catalina.logger.FileLogger\" directory=\"logs\" prefix=\"ok.com_log.\" suffix=\".txt\" timestamp=\"true\" /> 
</Host> 
</Engine> 

3:测试虚拟主机效果 
访问http://localhost/ 应该可以看到原来的tomcat默认页面。 
写一个 index.jsp 

<html> 
<title> 
test jsp 
</title> 
<%out.println(\"Hello World!\");%> 
</html> 

放在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部分 

<IfModule mpm_winnt.c> 
ThreadsPerChild 250 
MaxRequestsPerChild  0 
Win32DisableAcceptEx      #添加这一行即可,做过压力测试,对性能影响很小,可以忽略 
</IfModule>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值