tomcat整合apache
历时4个多小时,终于把tomcat与apache整合起来了。
中间出了各种各样的问题,现记录一下,也希望能对后来者有点帮助。
背景
apache与tomcat的区别联系大家都知道:
tomcat能处理jsp页面,也能处理html页面
apache只能处理静态资源,如html页面,图片,js等等,而且apache处理html页面比tomcat处理html的速度快。
那为了提升整个系统的访问速度。
我们就把apache与tomcat整合到一起,我们发的所有请求都是先给apache,如果具体的请求是html(还包括.jpg,.js等静态资源)就直接让apache处理,如果是jsp或servlet等动态信息,就交给tomcat处理。
下载与安装
jdk 1.7
tomcat 6 (tomcat7在整合中似乎有些问题,大家就用tomcat6吧)
apache 2.2.4
mod_jk 这就是把apache无法处理的动态请求发送给tomcat的东西。 这里要注意,mod_jk的版本一定要与apache的版本匹配
我建议大家就直接在百度上搜 "mod_jk-1.2.26-httpd-2.2.4" 或者去http://download.csdn.net/download/wng1978/6708623 这里直接下载
我一直强调版本问题,就是因为我自己下载的各种组件的版本不匹配,中间浪费了很多时间。
因此,我再说句题外话
大家在新接触一个东西时,特别是还处在搭环境的阶段的时候,下载的各个组件最好就按照你所阅读的那个文章所说的版本,这样至少不会出现版本冲突的问题。
初学者,一旦碰到这种版本问题,是很打击积极性的。
整合
mod_jk
解压缩mod_jk-1.2.26-httpd-2.2.4.rar,得到mod_jk-1.2.26-httpd-2.2.4.so,将它改名为mod_jk.so后放到apache的安装目录下的modules中。
编辑apache/conf/httpd.conf文件
找到Listen 80这一行( ctrl+f )修改为 Listen 81
在httpd.conf的最后加上
# 设置虚拟主机,定义端口为81 <VirtualHost 127.0.0.1:81> ServerName 127.0.0.1 #定义服务名称 E:/apache-tomcat-6.0.44-8500/webapps 是我的tomcat的位置 DocumentRoot "E:/apache-tomcat-6.0.44-8500/webapps" #定义站点项目所在路径,把路径指向 tomcat 中的默认网站目录 DirectoryIndex index.html index.htm index.jsp ErrorLog logs/shsc-error_log.txt ##下面例子中的ajp13,请大家记住,后面咱们还要用 CustomLog logs/shsc-access_log.txt common #例子1,让 Apache 支持对webapps/sun.shop/blog 中页面传送 JkMount /sun.shop/blog/* ajp13 #例子2,向Apache请求此文件夹内页面时,系统将转向用Tomcat解析 JkMount /*.jsp ajp13 #例子4,向 Apache 请求jsp页面时,用 Tomcat 进行解析 JkMount /*.do ajp13 #例子5,向 Apache 请求.do 动作时, 用 Tomcat 进行解析 JkMount /*.action ajp13 #例子6,向 Apache 请求 .action 动作时, 用 Tomcat 进行解析 </VirtualHost> # 允许客户端访问此路径 <Directory "E:/apache-tomcat-6.0.44-8500/webapps"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
说实话,我不知道Directory后面那个目录与virtualhost里面那个documentroot中的目录有什么区别联系
目前,我设置这个两个路径一直,都是tomcat下的webapps
到这一步后,我们先检查一下,apache是否已经安装好了。
检查
我已经在E:/apache-tomcat-6.0.44-8500/webapps 下部署了一个叫PathTest的项目,根目录下有个index.html文件。
http://localhost:81/PathTest/
在浏览器中输入上面的地址。
换一个地址
如果你的浏览器也能出现类似上面的效果,说明apache本身已经安装好了。
连接tomcat
将apache连接到tomcat上
再给httpd.conf后面加上以下内容
LoadModule jk_module modules/mod_jk.so # 此处 mod_jk.so 文件为你下载的文件 JkWorkersFile "E:/apache-tomcat-6.0.44-8500/conf/workers.properties" # 指定tomcat监听配置文件地址 JkLogFile "E:/apache-tomcat-6.0.44-8500/logs/mod_jk2.log" # 指定日志存放位置 JkLogLevel info
上面tomcat的地址大家根据自己的改动一下即可。
设定tomcat
设定tomcat那边如何接受apache的请求。
在上一步里我们有这样的配置
JkWorkersFile "E:/apache-tomcat-6.0.44-8500/conf/workers.properties"
在那么去tomcat的conf目录下看看,并没有workers这个文件,怎么办?新建一个就可以了嘛。并写入如下内容:
workers.tomcat_home=E:\apache-tomcat-6.0.44-8500 #让mod_jk模块知道Tomcat的位置 workers.java_home=C:\Program Files\Java\jre7 #让mod_jk模块知道jre的位置 ps=\ worker.list=ajp13 #模块版本 worker.ajp13.port=8009 #工作端口,若没占用则不用修改 worker.ajp13.host=localhost #本机,若上面的Apache主机不为localhost,作相应修改 worker.ajp13.type=ajp13 #类型 worker.ajp13.lbfactor=1 #代理数,不用修改
大家看这一行
worker.list=ajp13 #模块版本
这个ajp13和httpd.conf中的 JkMount /sun.shop/blog/* ajp13 的ajp13 是对应的
你把两处的ajp13改成"mytomcat"也是可以的。
还有 worker.ajp13.port=8009 这个端口指的是tomcat中ajp协议的端口,不是我们经常用的那个支持http的8080。
换句话说这个8009,最好就不要改。
另外,我的tomcat的端口号改成了8500。
在什么地方改?
在tomcat/conf/server.xml下
<Connector port="8500" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
8500与8009分别支持两种协议。
OK,现在我们试一试。
开启tomcat,访问 http://localhost:8500/PathTest/jsp/a.jsp
是一个很简单的jsp
开启apache,
对了还没有说怎么开启apache服务呢。
在apache/bin下有个ApacheMonitor。双击
选定服务后,start即可。
然后访问 http://localhost:81/PathTest/jsp/a.jsp
注意,我们的端口号是81,是访问apache的。
apache看到请求的地址是jsp,就通过JkWorkersFile找到apache后面的tomcat,tomcat处理后,再把结果给apache,然后apache再给浏览器。
如果http://localhost:81/PathTest/jsp/a.jsp 和 http://localhost:8500/PathTest/jsp/a.jsp 的返回结果一样。
就说明apache与tomcat整合完毕。
可能出现的问题
1 启动apache的时候 弹出这个错误 the requested operation has failed
如果不是端口问题的话,那么就是httpd.conf被我们修改错了。
怎么办
命令行内进入安装目录apache\bin,使用命令httpd -t,然后出现“Syntax error on line 133 of E:/apache\conf/httpd.conf :ServerAdmin takes one argument, the email address of the server administrator”,看它提示信息,说明,在这个配置文件里面的133行,出现了问题
上面的133行错误是什么意思呢?
给后面加上一个地址就OK
2 上面的配置中,我们在81端口,访问html,jsp,js,jpg都是没有问题的,深入甚至加入mvc框架后的.do,.action都可以正常处理。
可是我们如果访问的是servlet呢?
目前没有特别好的方法。
给httpd.conf下的VirtualHost里面加上这个
JkMount /*/servlet/* ajp13
这是什么意思?
如果请求的url中间包含"servlet"这个字符,apache就把它发给tomcat。
这篇文章参考了很多博客,具体参考信息就不一一列出了
tomcat整合apache的更多相关文章
- Geronimo tomcat: 在 Apache Geronimo 插件体系中将 Apache Tomcat 这个优秀的 Web 容器整合至其中
Apache Geronimo 灵活的插件体系将 Tomcat, OpenJPA, OpenEJB, ActiveMQ 等第三方组件集成至其中.本文从多角度介绍了在 Apache Geronimo 中 ...
- apache和tomcat有什么不同,为什么要整合apache 和tomcat
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Ap ...
- debian下Apache和tomcat整合(使用apt工具)
最近部署web系统,需要使用tomcat处理和Apache整合使用,tomcat处理JSP,Apache处理静态资源.开始不知道怎么操作,在网上查阅资料走了很多弯路.完成时候,发现其实很简单,现将配置 ...
- windows平台整合Apache与tomcat
Apache与Tomcat整合的好处 Apache主要用来解析静态文本,如html.Tomcat虽然也有此功能,但Apache效率大大高于Tomcat,尤其是对于并发数较大的企业级应用,能更好的显示A ...
- apache和tomcat有什么不同,为什么要整合apache 和tomcat?
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Ap ...
- apache+tomcat整合后的编码问题
apache+tomcat整合提供webserver服务的方式是为了实现两个目的:一是方便利用apache http server将客户请求均衡的分给tomcat1,tomcat2....去处理,即负 ...
- 在CentOS下企图整合Apache和Tomcat依然失败
环境: 64位CentOS Linux version 2.6.32-431.el6.x86_64 CentOS release 6.5 (Final) Apache/2.2.15,mod_jk/1 ...
- apache+tomcat整合
一 .Apache与Tomcat的比较 apache支持静态页面,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是 ...
- Apache与Tomcat整合
Apache与Tomcat整合 一 Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache ...
随机推荐
- Zookeeper 客户端API调用示例(基本使用,增删改查znode数据,监听znode,其它案例,其它网络参考资料)
9.1 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话 它提供以下几类主要方法 : 功能 描述 create 在本地目录树中创建 ...
- django+uwsgi+nginx+postgresql备忘
安装pg创建数据库xxx设置用户密码111111 apt-get install postgresql su - postgres psql create database xxx; alter us ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap,第 1 部分: kprobe
kprobe 的原理.编程接口.局限性和使用注意事项 本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTr ...
- Android开发技巧——定制仿微信图片裁剪控件
拍照--裁剪,或者是选择图片--裁剪,是我们设置头像或上传图片时经常需要的一组操作.上篇讲了Camera的使用,这篇讲一下我对图片裁剪的实现. 背景 下面的需求都来自产品. 裁剪图片要像微信那样,拖动 ...
- 初识RecyclerView
初识RecyclerView 效果图 RecyclerView与ListView对比(官方) RecyclerView 小组件比 ListView 更高级且更具灵活性. 此小组件是一个用于显示庞大数据 ...
- iOS-改变UITextField的Placeholder颜色的三种方式
转自:http://blog.csdn.net/mazy_ma/article/details/51775670 有时,UITextField自带的Placeholder的颜色太浅或者不满足需求,所以 ...
- Swift中如何化简标准库中冗长的类实例初始化代码
可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效. 我们实际写一个例子看一下: import UIKit class CFoo{ static let share ...
- ubuntu日志文件管理
众所周知,ubuntu的日志文件会越来越大,需要定期管理 logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/v ...
- ROS机器人程序设计-学习小结-
ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...
- eval和列表解析的一处陷阱
>>> def f(): a=1 return [i+a for i in range(3)] >>> f() [1, 2, 3] >>> def ...