为什么要用apache来整合tomcat呢?首先,是因为apache是静态服务器,tomcat是动态服务器,二者相辅相成,才能完美构建一个web服务器;其次,用apache作为中心服务器器,将请求分发到多个tomcat,解决负载均衡,实现服务器的稳定性。那么,也有人会说,ngnix整合tomcat不就可以了,而且也很流行。我想说,实现一件事情可以有多种途径,不能只认定一条道,而要熟悉不同路子,相互比较,确定最合适的方案,也就是性价比等各方面最佳的途径。
apache整合tomcat需要三件东西,第一,apache;第二,tomcat;第三,apache和tomcat之间的桥,mo_jk.so。现在我们一个一个介绍。
第一,apache。
1、自己下载apache。这里不再赘述。
2、配置apache。
找到安装目录 conf/httpd.conf 文件并打开,搜索documentRoot字段
将DocumentRoot修改如下:
|
继续往下修改,找到
|
3、在D:/wwwroot目录下放一个html,作为测试。
第二,tomcat。自行下载,并测试启动。
第三,整合。
apache有一个叫mod_jk的模块,通过配置表示式后将请求通过mod_jk 然后传递给tomcat 。
1、加入mod_jk模块
该模块名称为: mod_jk.so,将其加入到apache安装目录下modules下 。
(注意: mod_jk.so这个文件一定要和apache版本一致)
2、配置解析表达式
打开httpd.conf文件,在文件末尾追加如下内容:
LoadModule jk_module modules/mod_jk.so #加载mod_jk模块
JKWorkersFile conf/workers.properties #对mod_jk模块进行属性配置,该文件需要手动创建
JkLogFile logs/mod_jk.log
<VirtualHost *>
#创建虚拟文件目录
DirectoryIndex index.html index.htm index.jsp index.action
ErrorLog logs/error_log.txt
CustomLog logs/access_log.txt common
#JKMount表达式,标识符合改路径的url将转发给tomcat解析
JkMount /*WEB-INF ajp13
JkMount /*.action ajp13
JkMount /servlet/* ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /*.action ajp13
JkMount /*.json ajp13
JkMount /WebDemo ajp13 #为了测试,这里这样写
</VirtualHost> 在conf目录下建立w
orders.properties文件,其内容如下
|
√ workers.tomcat_home:用来指定tomcat的位置
√ worker.list :指定工作的的web容器映射
√ worker.ajp13.host : 访问host
√ worker.ajp13.type: 访问协议
在tomcat安装目录conf/server.xml文件中指定了8009端口访问的协议
3. 在tomcat中部署应用,通过apache来访问
通过maven创建了一个web工程 打包为WebDemo,放入tomcat的webapps目录下,启动tomcat并重启apache,访问 http://localhost/WebDemo 得到
出错了! 这是正常的,此时还需要将webapps下的WebDemo文件夹复制到d:/wwwroot下,复制好后将其中的WEB-INF文件夹删除(这部分的内容将通过JkMount表达式来传递)
wwwroot目录下的静态文件)
至此,整合完毕.
运行图如下: