Apache和Tomcat的整合,原理及例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Apache和Tomcat的整合,原理及例子
这类文档很多很多,但是大多是由不明原理的人拘泥于具体版本写出来的,有很多错漏或多余的部分。
最后找到一篇写得很很不错的,/blog/ 我修正了其中的错误然后加了一些自己的理解
原理
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.5
下载地址:
tomcat 5.5.9
下载地址:
apache apache_2.0.59
下载地址: /download.cgi
jakarta-tomcat-connectors-jk2.0.43-win32-apache2.0.49(根据Apache版本决定)
下载地址:/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.43.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 ,另一个是
当然 是虚拟的,本地测试时,应该修改系统中的hosts文件,添加一行 127.0.0.1
1:Apache 虚拟主机配置:
Httpd.conf文件最后添加
代码
include D:\server\Apache2\conf\vhost.conf