tomcat apach 配置
Apache与tomcat实现分布式应用部署
一:原理
tomcat是一个web应用服务器,能够解析静态文件和动态文件(如:html、jsp、servlet等);apache是一个webserver,能够解析静态文件。Tomcat作为一个独立的web服务器是可以使用的,但是它对静态文件的解析能力不如apache,所以就产生现在的web应用的分布式部署,apache+tomcat。
两者之间的通信通过workers配置(由tomcat使用Server.xml中的Connector标签定义端口port和协议protocol,workers.properties文件中定义端口、协议、tomcat服务器地址);由mod_jk模块负责两者通信的处理。通信协议有很多,其中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文件中的相应定义即可。
三:软件版本说明
Jdk1.4.2_08(1.5也可以,把JRE装在JDK目录下)
tomcat5.0.、5.5
apacheapache_2.0.55-win32-x86-no_ssl.msi
mod_jk_1.2.6_2.0.50.dll(要根据apache版本确认)
把上面所有组件都安装到D:\Server目录下,这样也方便日常管理配置和将来移植到别的服务器上去
JAVA_HOMEjava安装路径
TOMCAT_HOMEtomcat安装路径
APACHE_HOMEapache安装路径
四:操作步骤
4.1软件安装
按顺序安装Jdk1.5、tomcat、apache
可能遇到的问题
问题1:在解析JSP页面时,提示无法找到javacompiler
请拷贝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中原有的任何文件。
4.2加入mod_jk连接模块
拷贝mod_jk_1.2.6_2.0.50.dll到APACHE_HOME\apache2\modules\文件夹下,并重命名为mod_jk.dll
4.3修改apache配置文件
为了保持httpd.conf文件的简洁,把jk模块的配置放到单独的文件中来,就在httpd.conf中增加一行调用include“D:\server\Apache2\conf\mod_jk.conf”
4.4配置mod_jk.conf
下面是mod_jk.conf的文件内容,根据项目实际情况进行修改(照做就可以了)
#Loadmod_jkmodule
LoadModulejk_modulemodules/mod_jk.dll
#Wheretofindworkers.properties
JkWorkersFileconf/workers.properties
#Wheretoputjklogs
JkLogFilelogs/mod_jk.log
#Setthejkloglevel[debug/error/info]
JkLogLevelinfo
#Selectthelogformat
#JkLogStampFormat\"[%a%b%d%H:%M:%S%Y]\"
#JkOptionsindicatetosendSSLKEYSIZE,
JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories
#JkRequestLogFormatsettherequestformat
#JkRequestLogFormat\"%w%V%T\"
#Sendservletforcontext/examplestoworkernamedajp13
#JkMount/servlet/*ajp13
#SendJSPsforcontext/examplestoworkernamedajp13
JkMount/*.jspajp13
JkMount/*.doajp13
JkMount/*/*.doajp13
上面这一行我们设置了了/*.jspajp13就是说把所有.jsp结尾的文件都由ajp13这个worker交给tomcat处理了
4.5配置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#代理数,不用修改
4.6虚拟主机的配置
举例配置2个vhost网站一个是localhost,另一个是www.ok.com
当然www.ok.com是虚拟的,本地测试时,应该修改系统中的hosts文件,添加一行127.0.0.1www.ok.com
NameVirtualHost*:80
<VirtualHost*:80>
ServerAdminwebmaster@localhost
DocumentRoot"C:/tomcat-5.5.9/webapps/jsp-examples/"
ServerNamelocalhost
ErrorLoglogs/localhost-error_log
CustomLoglogs/localhost-access_logcommon
</VirtualHost>
<VirtualHost*:80>
DocumentRootD:/projectTest/
ServerName192.168.5.220
ErrorLoglogs/ok.com-error_log
CustomLoglogs/ok.com-access_logcommon
<Location/server-status>#这样我可以看到apache服务器状态
SetHandlerserver-status
#Orderdeny,allow
#Denyfromall
#Allowfromlocalhost
#Allowfrom192.168.5.80
</Location>
</VirtualHost>
4.7虚拟主机的配置
添加新的www.ok.com虚拟主机,在tomcat安装路径\conf\server.xml的最后,找到<Engine>段,改为
<Engine>
<Hostname=”localhost”……>
</Host>
<Hostname=\"www.ok.com\"debug=\"0\"appBase=\"D:/server/www/\"unpackWARs=\"true\"autoDeploy=\"true\"xmlValidation=\"false\"xmlNamespaceAware=\"false\">
<Contextpath=\"\"docBase=\".\"/>
<LoggerclassName=\"org.apache.catalina.logger.FileLogger\"directory=\"logs\"prefix=\"ok.com_log.\"suffix=\".txt\"timestamp=\"true\"/>
</Host>
</Engine>
五:结语
因tomcat、apache都是开源软件,对版本搭配要求比较严格,因此一定要注意版本。
mod_jk.conf、workers.properties不是所有tomcat都自带的,从网络上下载就可以了。