刚出来实习让搞apache集成tomcat当服务器,由于自己在学校只学过理论基础,所以对这些东西的了解完全从空白开始,一路跌跌撞撞走了很多弯路,我要说的第一句话是,不要把apache集成tomcat和Apache + Tomcat集群混为一谈,后者更麻烦一些,我刚开始由于不懂一直按后者来配置,由于哪些博客都是很久以前写的了(很多大佬那时用的apache都是2.2的),出了很多问题,但由于概念被我搞混了一直不能解决问题,可谓心力交瘁了,但是问题解决后总会发现不过如此,我所欠缺的是,坚持,坚持,再坚持。
先说说我对集成本身的了解吧,tomcat:能处理jsp、html等,apache只能处理静态的请求;apache处理html能力比tomcat强。apache集成tomcat的环境下,通过apache的80端口访问jsp页面,apache只是起到一个转发作用,jsp还是在tomcat运行。
需要的文件:
tomcat7
apache2.4
mod_jk.so:可以到我的博客下载:https://download.csdn.net/download/bokerr/10615103
(window下可以直接下载了用,linux下又完全是另一种情况了)
其它好像也没什么改的,启动失败就改端口,如果改了端口还是启动不了那就是配置文件错了,就去apache的bin目录下使用命令行(如果不理解可以去网上查一下),用指令启动看错误在什么地方:(用指令启动会报出具体因为什么原因导致启动失败,可以具体定位到具体的配置文件的具体位置,这么启动确实繁琐了点,不过平时就用apache/bin/ApacheMonitor.exe启动就好了)
.\httpd.exe -w -n "apache" -k start
//引号内是在windows服务那边你的apache服务的具体名字(管理->服务->然后找到具体名字)
例如我的:
apache和Tomcat都启动成功能正常使用了就可以进行配置了(配置途中建议关掉。。。。。鬼知道会不会蹦出来一个错误):
在apache的配置文件apache/conf/httpd.conf下把LoadModule access_compat_module modules/mod_access_compat.so模块的注释取消,否则设置权限时会提醒order等等设置是无效的,70多行
在D:\Apache24\conf目录下新建文件workers.properties和mod_jk.conf
以下三个配置文件在windows和linux下配置的内容一样
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
JkWorkersFile D:/Apache24/conf/workers.properties
JkLogFile D:/Apache24/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /*/servlet/* worker1
JkMount /*.jsp worker1
JkMount /application/* worker1
JkMount /*.do worker1
JkMount /*.action worker1
JkMount /*.class worker1
JkMount /*.jar worker1
LoadModule jk_module modules/mod_jk.so
Include /etc/httpd/conf/mod_jk.conf
workers.properties配置了转发的Tomcat,mod_jk.conf配置的内容包括:加载mod_jk.so模块(这是apache的一个功能模块,mod_jk.conf就是为了启动它进行配置)、设置相关的日志格式、配置需要转发到tomcat的请求类型(apache不能处理jsp等等,apache会根据workers.properties里面配置的tomcat端口、host等等信息将请求转发到tomcat,然后接收tomcat执行结果返回给请求对象:即浏览器)