Apache+Tomcat搭建Web站点 for window

 

 1.       Web服务器简介

Web服务器产品中,主要有Winodws平台中的IISApache/Tomcat,其中后者也可以安装在LinuxUnix等操作系统平台中。Web服务器决定了Web程序的类型,IIS支持asp.net开发,如果需要开发基于Java技术的网站,则需要安装Apache/Tomcat服务器。在Windows平台中,相比IISApache/Tomcat服务器的安装、配置和管理相对要复杂一些,但有关网站的基本概念是一样的。此外,在Windows平台中,如果已经安装了Internet信息服务IIS,要使用ApacheTomcat,应将Windows中的IIS服务停止或禁用。

 2.       ApacheTomcat

Apache是最流行的Web服务器,开放源代码,支持跨平台的应用(可以运行在几乎所有的LinuxUnixWindows系统平台上),尤其对Linux的支持相当完美。

apache的优点有:

功能强大,apache自带了很多功能模块,可根据需求编译自己需要的模块。

配置简单,apache的配置文件非常简单,通过简单的配置可实现强大功能。

速度飞快,apache处理静态页面文件效率非常高,可以应对大并发和高负荷访问请求。

性能稳定,apache在高负荷请求下性能表现卓越,执行效率非常高。

但是apache也有自身的缺点:

只支持静态网页,对于jspphp等动态网页不支持

Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,因此,不太适合于多处理器环境。

 

TomcatSunApache合作做出来的JSPServer,有如下优点:

支持ServletJSP,可以很好的处理动态网页。

跨平台性好:TomcatJava程序,所以只要有JDK就可以使用,不需要考虑操作系统平台。

但是,tomcat也有自身缺点:

处理静态页面效率不高:Tomcat本身可以做为Web Server,但是tomcat在处理静态页面时没有Apache迅速。

可配置性不强:tomcat不像Apache一样配置简单,稳定、强壮。

综上所述,通过相互的整合刚好弥补了各自的缺点,通过整合可以实现:

客户端请求静态页面时,由Apache服务器响应请求。

客户端请求动态页面时,则是Tomcat服务器响应请求。

通过apache信息过滤,实现网站动、静页面分离,保证了应用的可扩展性和安全性。

既然要让ApacheTomcat协调工作,就必需有一个连接器把它们联系起来,这就是下面要提到的Connector,下个小节具体讲述Connector的选择和使用。

 3.       ApacheTomcat连接器

Apache是模块化的web服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载来实现。为了让apache tomcat协调工作,开源爱好者们开发出了很多可以利用的模块,Apache2.2版本之前,一般有两个模块可供选择:mod_jk2 mod_jkmod_jk2模块是比较早的一种连接器,在动、静页面过滤上可以使用正则表达式,因此使用配置灵活,但是mod_jk2模块现在已经没有 开发人员支持了,版本更新也就此停止。继承jk2模块的是mod_jk模块,mod_jk模块支持Apache 1.x2.X系列版本,现在一般都使用mod_jkApacheTomcat的连接器。

 Apache2.2版本以后,又出现了两种连接器可供选择,那就是http-proxyproxy-ajp模块,apacheproxy(代理)模 块可以实现双向代理,功能非常强大,从连接器的实现原理看,用http-proxy模块实现也是很自然的事情,只需打开tomcathttp功能,然后 apacheproxy代理功能将动态请求交给tomcat处理,而静态数据交给apache自身就可以了。proxy-ajp模块是专门为 tomcat整合所开发的,通过ajp协议专门代理对tomcat的请求。根据官方的测试,proxy-ajp的执行效率要比http-proxy高,因 此在Apache2.2以后的版本,用proxy-ajp模块作为apachetomcat的连接器是个不错的选择。

需要说明的是,这些连接功能的实现,都是通过在apache中加载相应的功能模块实现,比如上面提到的mod_jkmod_jk2proxy-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)以上的版本,具体原因后面会讲到, 由于ApacheTomcat项目与集群相关的模块均处于持续发展和优化过程中,因此我不保证本文配置方法对所有ApacheTomcat版本均适用。

 软件安装

Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。对于已安装IIS的机器,在启动Apache服务之前必须首先停止IIS Admin服务,不然会因为端口冲突而无法启动。服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个"It works!"的页面就代表Apache已经正常工作了。

(建议安装在c://Apache目录下,目录越简单越好)

 安装Tomcat(省略…..) tomcat端口取默认 8080

 本文仅为讲解配置过程,Apachetomcat均工作在同一台机器上。实际部署时没有任何限制,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,配置虚拟站点,在最下面加上

 

<VirtualHost *:80>
    ServerAdmin admin@hooblogs.com
    DocumentRoot "C:/Apache/htdocs/www.hooblogs.com"
    ServerName www.hooblogs.com
ServerAlias localhost
ProxyPassMatch ^/(console|theme)/(.*)$ http://localhost:8080
ProxyPassMatch ^/.*\.(jsp|action|do)$ http://localhost:8080
ProxyPass / !
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse ajp://127.0.0.1:8009/
LogLevel notice
    ErrorLog "logs/hooblogs.com-error.log"
    CustomLog "logs/hooblogs.com-access.log" common
</VirtualHost>

 

ProxyPassMatch上面我提到apache2.25以上的版本,因为ProxyPassMatch命令是在2.25 这个版本才加上的 我在实际配置的时候就遇到了这个问题, 因为我下载的是2.24的版本,在网上找了ProxyPassMatch的用法后,发现启动apache总是报错,失败! 不知道是什么原因,很多人也没有提到这个问题,后面在一篇文章里看到,ProxyPassMatch命令是在2.25这个版本才加上的,换了个版本后,这才成功,知道这里是个“坑”,自己掉下去了,就不能让大家再掉下去了。

 

在这里解释一下ProxyPassMatchProxyPass这两个命令,  二者主要是起到过滤的作用,区别在于ProxyPassMatch支持正则表达式,通过这两个命令可以将请求区分开,哪些请求交给tomcat去处理,哪些请求留给Apache自已处理。

ProxyPass / ajp://127.0.0.1:8009/表示将需要给tomcat的请求通过ajp协议进行连接。

 

DocumentRoot 是在Apache目录下建的一个存放静态资源(css, js, html)的文件夹, 这个目录与tomcat下部署项目的目录是分开的。

 

配制完成后,分别启动ApacheTomcat, OK!

 这种配置方式主要作用是将静态资源与动态代码分离。

 


posted @ 2013-04-16 09:24  戴眼镜的码农  阅读(1106)  评论(0编辑  收藏  举报