zoukankan      html  css  js  c++  java
  • 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!

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

     


  • 相关阅读:
    事件基础
    DOM
    GoWeb编程之多路复用
    GoWeb编程之HelloWorld
    Linux libtins 库安装教程
    模式串匹配KMP详解
    树的重心
    Light OJ 1064
    Light OJ 1060
    1057
  • 原文地址:https://www.cnblogs.com/cookray/p/3023402.html
Copyright © 2011-2022 走看看