刚出来实习让搞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下又完全是另一种情况了)
具体流程:
a.首先tomcat:我用的tomcat7.0.90,安装很简单,只需要配置一下几个环境变量就好了,8080端口被占用就改掉,反正网上教程很多我就不赘述了。
b.然后apache:httpd-2.4.16-win64 估计2.4都能用吧,说得不对希望指正。
其它好像也没什么改的,启动失败就改端口,如果改了端口还是启动不了那就是配置文件错了,就去apache的bin目录下使用命令行(如果不理解可以去网上查一下),用指令启动看错误在什么地方:(用指令启动会报出具体因为什么原因导致启动失败,可以具体定位到具体的配置文件的具体位置,这么启动确实繁琐了点,不过平时就用apache/bin/ApacheMonitor.exe启动就好了)
.\httpd.exe -w -n "apache" -k start
//引号内是在windows服务那边你的apache服务的具体名字(管理->服务->然后找到具体名字)
例如我的:
![](/qrcode.jpg)
apache和Tomcat都启动成功能正常使用了就可以进行配置了(配置途中建议关掉。。。。。鬼知道会不会蹦出来一个错误):
在apache的配置文件apache/conf/httpd.conf下把LoadModule access_compat_module modules/mod_access_compat.so模块的注释取消,否则设置权限时会提醒order等等设置是无效的,70多行
c.把mod_jk.so放到D:\Apache24\modules目录下。
d.接下来进行配置文件的处理
在D:\Apache24\conf目录下新建文件workers.properties和mod_jk.conf
以下三个配置文件在windows和linux下配置的内容一样
在新建的workers.properties里配置如下内容:
#worker.list表示tomcat,不需要写入tomcat安装路径,当jsp请求发送到apache的80端口,apache根据以下参
#数找到对应的tomcat:type、host、port等
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
在新建的mod_jk.conf里填入如下内容,路径注意修改为你自己的
#加载并设置mod_jk.so组件
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"
#需要进行转发的列表,其中包块了:servlet、jsp、.do、.action等等。。
JkMount /*/servlet/* worker1
JkMount /*.jsp worker1 //jsp转发到worker1(worker1是通过mod_jk.conf匹配的tomcat)
JkMount /application/* worker1
JkMount /*.do worker1
JkMount /*.action worker1 //转发action到worker1
JkMount /*.class worker1
JkMount /*.jar worker1
apache的 httpd.conf配置文件最后面加上两行,读入上面的配置两个配置文件:
#读入上面配置的两个配置文件
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执行结果返回给请求对象:即浏览器)
补充:linux下apache集成tomcat和windows下的区别,
PS:更新中,建议忽略以下内容
linux下装软件比较烦,这两种环境下配置文件中配置的内容都是一样的,主要区别来自怎么装软件,建议yum安装apache,编译源码的方法对新手不太友好,以及配置文件目录要找清楚,mod_jk.so也不能直接用了,这个要编译后才能使用;如果你的虚拟机有自带apache建议就不要折腾了,不过一般都是2.2.*版本,linux下我用apache2.2.*和tomcat7.*也能跑起来,唯一麻烦的是mod_jk.so的编译,如果你的apache已经存在了;(有空的同学可以编译安装试试,去踩踩雷也是好的)
//适用于centOS6.*版本的yum源安装推荐,使用前不妨大致了解下yum的作用,很快
https://blog.csdn.net/owangf_dl/article/details/78966369
下面是我在centos6.5下使用的一些命令:
使用rpm -qa | grep httpd查看是否已经安装了httpd
使用ps -ef | grep httpd查看httpd的进程
使用service httpd status查看httpd的运行状态
使用service httpd stop可以停止httpd
使用service httpd start 可以启动httpd
//编译mod_jk.so时需要这个路径,某些情况下你这个路径不见得和别人的一样,所以这个指令用处就大了
find / -name apsx
查看进程端口: ps aux | grep yum
终止进程:kill -9 pid(进程标识)