Apache+Tomcat搭建Web站点 for window
1. Web服务器简介
在Web服务器产品中,主要有Winodws平台中的IIS和Apache/Tomcat,其中后者也可以安装在Linux、Unix等操作系统平台中。Web服务器决定了Web程序的类型,IIS支持asp和.net开发,如果需要开发基于Java技术的网站,则需要安装Apache/Tomcat服务器。在Windows平台中,相比IIS,Apache/Tomcat服务器的安装、配置和管理相对要复杂一些,但有关网站的基本概念是一样的。此外,在Windows平台中,如果已经安装了Internet信息服务IIS,要使用Apache和Tomcat,应将Windows中的IIS服务停止或禁用。
2. Apache与Tomcat
Apache是最流行的Web服务器,开放源代码,支持跨平台的应用(可以运行在几乎所有的Linux、Unix、Windows系统平台上),尤其对Linux的支持相当完美。
apache的优点有:
□ 功能强大,apache自带了很多功能模块,可根据需求编译自己需要的模块。
□ 配置简单,apache的配置文件非常简单,通过简单的配置可实现强大功能。
□ 速度飞快,apache处理静态页面文件效率非常高,可以应对大并发和高负荷访问请求。
□ 性能稳定,apache在高负荷请求下性能表现卓越,执行效率非常高。
但是apache也有自身的缺点:
□ 只支持静态网页,对于jsp、php等动态网页不支持
□ Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,因此,不太适合于多处理器环境。
Tomcat是Sun和Apache合作做出来的JSPServer,有如下优点:
□ 支持Servlet和JSP,可以很好的处理动态网页。
□ 跨平台性好:Tomcat是Java程序,所以只要有JDK就可以使用,不需要考虑操作系统平台。
但是,tomcat也有自身缺点:
□ 处理静态页面效率不高:Tomcat本身可以做为Web Server,但是tomcat在处理静态页面时没有Apache迅速。
□ 可配置性不强:tomcat不像Apache一样配置简单,稳定、强壮。
综上所述,通过相互的整合刚好弥补了各自的缺点,通过整合可以实现:
客户端请求静态页面时,由Apache服务器响应请求。
客户端请求动态页面时,则是Tomcat服务器响应请求。
通过apache信息过滤,实现网站动、静页面分离,保证了应用的可扩展性和安全性。
既然要让Apache和Tomcat协调工作,就必需有一个连接器把它们联系起来,这就是下面要提到的Connector,下个小节具体讲述Connector的选择和使用。
3. Apache和Tomcat连接器
Apache是模块化的web服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载来实现。为了让apache和 tomcat协调工作,开源爱好者们开发出了很多可以利用的模块,在Apache2.2版本之前,一般有两个模块可供选择:mod_jk2和 mod_jk,mod_jk2模块是比较早的一种连接器,在动、静页面过滤上可以使用正则表达式,因此使用配置灵活,但是mod_jk2模块现在已经没有 开发人员支持了,版本更新也就此停止。继承jk2模块的是mod_jk模块,mod_jk模块支持Apache 1.x和2.X系列版本,现在一般都使用mod_jk做Apache和Tomcat的连接器。
在Apache2.2版本以后,又出现了两种连接器可供选择,那就是http-proxy和proxy-ajp模块,apache的proxy(代理)模 块可以实现双向代理,功能非常强大,从连接器的实现原理看,用http-proxy模块实现也是很自然的事情,只需打开tomcat的http功能,然后 用apache的proxy代理功能将动态请求交给tomcat处理,而静态数据交给apache自身就可以了。proxy-ajp模块是专门为 tomcat整合所开发的,通过ajp协议专门代理对tomcat的请求。根据官方的测试,proxy-ajp的执行效率要比http-proxy高,因 此在Apache2.2以后的版本,用proxy-ajp模块作为apache和tomcat的连接器是个不错的选择。
需要说明的是,这些连接功能的实现,都是通过在apache中加载相应的功能模块实现,比如上面提到的mod_jk、mod_jk2、proxy-ajp 模块,都要事先通过源码编译出对应的模块(注:在Liunx环境下安装时需要进行编译,在window环境下则不需要),然后通过apache配置文件动态加载,实现连接器功能。这点也是apache的优势所在。
因为我是使用proxy-ajp模块来实现连接的,所以在下面的讲述中,我们将重点讲述proxy-ajp作为连接器的安装配置与实现。
4. Apache + Tomcat集群配置详解
□软件准备
Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本
Tomcat 6.0 : http://tomcat.apache.org/download-60.cgi,下载Tomcat 6.0.18 zip文件
注意:Apache的版本请下载2.25(含2.25)以上的版本,具体原因后面会讲到, 由于Apache和Tomcat项目与集群相关的模块均处于持续发展和优化过程中,因此我不保证本文配置方法对所有Apache和Tomcat版本均适用。
□软件安装
把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。对于已安装IIS的机器,在启动Apache服务之前必须首先停止IIS Admin服务,不然会因为端口冲突而无法启动。服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个"It works!"的页面就代表Apache已经正常工作了。
(建议安装在c://Apache目录下,目录越简单越好)
安装Tomcat(省略…..) tomcat端口取默认 8080
本文仅为讲解配置过程,Apache和tomcat均工作在同一台机器上。实际部署时没有任何限制,Apache和单个tomcat可以分别部署在不同的服务器上。
□Apache配置
Apache 2.2集成了proxy-ajp功能,相对于1.3版本使用mod-jk,就不需要再进行繁琐的worker.properties配置,配置过程大幅简化。
首先,在Apache安装目录下找到conf/httpd.conf文件,以文本编辑器打开。
去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。
(注:如果不做集群和负载均衡的话,mod_proxy_balancer.so就不需要加载)
向下拉动文档找到节点,在DirectoryIndex index.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。
继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。
用文本编辑器打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上
ProxyPassMatch:上面我提到apache要2.25以上的版本,因为ProxyPassMatch命令是在2.25 这个版本才加上的。 我在实际配置的时候就遇到了这个问题, 因为我下载的是2.24的版本,在网上找了ProxyPassMatch的用法后,发现启动apache总是报错,失败! 不知道是什么原因,很多人也没有提到这个问题,后面在一篇文章里看到,ProxyPassMatch命令是在2.25这个版本才加上的,换了个版本后,这才成功,知道这里是个“坑”,自己掉下去了,就不能让大家再掉下去了。
在这里解释一下ProxyPassMatch和ProxyPass这两个命令, 二者主要是起到过滤的作用,区别在于ProxyPassMatch支持正则表达式,通过这两个命令可以将请求区分开,哪些请求交给tomcat去处理,哪些请求留给Apache自已处理。
ProxyPass / ajp://127.0.0.1:8009/表示将需要给tomcat的请求通过ajp协议进行连接。
DocumentRoot: 是在Apache目录下建的一个存放静态资源(css, js, html)的文件夹, 这个目录与tomcat下部署项目的目录是分开的。
配制完成后,分别启动Apache和Tomcat, 就OK了!
这种配置方式主要作用是将静态资源与动态代码分离。