我们知道Apache是web服务器,用来解析静态网页(html)的,如果要在Apache 服务器下运行Jsp动态页面的话就需要一个解释器来执行Jsp网页,这个解释器就是Tomcat。Apache 侧重于Http Server,特点是简单、速度快、性能稳定,并可做代理服务器来使用。Tomcat 侧重于servlet引擎,如果以standalone方式运行,功能上与Apache是等效的,不过对静态网页的支持不太理想。
Apache与Tomcat整合的好处:
1. 如果客户端请求的是静态页面,则只需要Apache服务器响应请求
2. 如果客户端请求的是动态页面,则Tomcat服务器响应请求
3. 因为Jsp是服务器端解释代码的,整合可以减少Tomcat的服务开销
下面我将详细叙述如何在Linux平台下整合Apache和Tomcat。
一、安装Apache
详情见:http://www.fengwenxuan.com/index.php/apache/254.html
注意:这里选择第一种方法手动编译安装Apache源码包。
二、安装JDK
详情见:http://www.fengwenxuan.com/index.php/red-hat-enterprise-linux/238.html
注意:这里我选择将JDK安装到/usr/local路径下。
三、安装Tomcat
详情见:http://www.fengwenxuan.com/index.php/red-hat-enterprise-linux/242.html
四、Apache与Tomcat 整合
Tomcat本身已经提供了Http服务,该服务默认的端口是8080,装好Tomcat后,通过8080端口可以直接使用Tomcat 解析网页。通过整合可以实现以下三个功能:
a. 提升对静态文件的处理性能
b. 利用Web服务器来做负载均衡以及容错
c. 无缝的升级应用程序
事实上这三点对一个web网站来说是非常重要的,我们希望我们的网站不仅速度快,而且要稳定,不能因为某个Tomcat宕机或者是升级程序导致用户访问不了,而能完成这几个功能的最好的Http服务器就只有Apache的Http Server了,它跟Tomcat的结合是最紧密和可靠的。
下面就介绍用JK方法实现Apache和Tomcat整合在一起,还有两种方法可以通过Apache自带的模块实现:mod_proxy和mod_proxy_ajp,后两种比较简单,可以参阅:
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html
1. 下载tomcat-connectors-1.2.30-src.tar.gz
到Apache官网下载,详细:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/
2. 编译安装
将下载好的源码包放到/usr/local目录下
# cd /usr/local
# tar - zxvf tomcat-connectors-1.2.30-src.tar.gz
# cd tomcat-connectors-1.2.30-src/native
# ./configure --with-apxs=/usr/local/apache/bin/apxs //对应apache的安装目录
# make
3. 复制模块到apache的模块目录
# cd apache-2.0/
# cp mod_jk.so /usr/local/apache/modules
4. httpd.conf对JK的配置
httpd.conf是Apache服务器的配置文件,用来加载JK模块以及指定JK配置文件信息
# vi /usr/local/apache/conf/httpd.conf
添加下面两行内容
LoadModule jk_module modules/mod_jk.so
Include conf/extra/mod_jk.conf
5. 配置jk_configure
# vi /usr/local/apache/conf/extra/mod_jk.conf
添加下面的内容
# Where to find workers.properties
JkWorkersFile /usr/local/apache/conf/workers.properties
# Where to put jk logs
JkLogFile /usr/local/apache/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]"
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# JkOptions indicate to send SSL KEY SIZE,
#JkOptions +ForwardKeySize +ForwardURICompat –ForwardDirectories
# Send JSPs for context /examples to worker named worker
JkMount /*.jsp worker1
JkMount /*.do worker1 //这句话负责解析.do的Servlet文件,一定要加上.do后缀才能解析Servlet文件
JkMount /examples/* worker1
说明:这里主要指定一些配置文件路径,第一条是workers.properties到tomcat服务器的连接定义文件,第二、三、四、五条都是设置日志相关的信息,第六条设置转发相关的一些参数,第七条是设置URL前缀的一些信息,此处详细的设置参照http://tomcat.apache.org/connectors-doc-archive/jk2/jk/aphowto.html #Obtaining mod_jk
6. 配置workers.properties
workers.properties 是到Tomcat服务器的连接定义文件
# vi /usr/local/apache/conf/workers.properties
添加下面的内容
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
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
说明:
#定义工作列表,多个列表用逗号分隔
worker.list=worker1
#协议类型
worker.worker1.type=ajp13
#tomcat所在服务器的IP
worker.worker1.host=localhost
#tomcat的端口
worker.worker1.port=8009
#如果处于负载均衡状态,多个tomcat的负载比例
worker.worker1.lbfactor=50
#CacheSize属性在使用多线程Web服务器如Apache 2.0时,可以是tomcat发挥出更高的水平,如果没有设置的cachesize,连接缓存支持被禁用。
worker.worker1.cachesize=10
#cache_timeout cachesize指定的连接,在连接关闭之前cache中缓存的超时时间。可降低服务器的链接数量。 worker.worker1.cache_timeout=600
#用于如果webserver 和tomcat引擎中存在防火墙,为防止防火墙切断连接,发送KEEP_ALIVE标志。 worker.worker1.socket_keepalive=1
#类似于cache_timeout worker.worker1.socket_timeout=300
#更多详细信息请参阅: http://tomcat.apache.org/connectors-doc-archive/jk2/jk/workershowto.html
7. 修改server.xml文件
修改Tomcat目录下conf中的server.xml文件,将Tomcat 的Web服务目录指向Apache的Web服务目录。
在</Host>前面加入:
<Context path="" docBase="/usr/local/apache/htdocs" debug="0" reloadable="true" />
8. 测试
重启Tomcat服务
# /usr/local/apache-Tomcat-7.0.2/bin/shutdown.sh
# /usr/local/apache-Tomcat-7.0.2/bin/startup.sh
重启Apache服务
# /usr/local/apache/bin/apachectl restart
在Apache的Web服务目录下写一个Jsp网页,浏览器输入http://localhost时可以看到Apache的默认主页显示It Works!证明Apache 解析了默认html主页。浏览器输入http://localhost/(你的Jsp网页),如果正常显示你的Jsp网页,证明Apache 借助80端口调用Tomcat成功解析了Jsp文件。至此,Apache和Tomcat在Linux平台下的整合已经成功结束了,过段时间我将会给大家展示Linux平台下Apache和Tomcat的集群与负载均衡。