详细讲解Apache和Tomcat的集成原理和配置方案。Apache和Tomcat都是Web服务器,它们之间既有联系又有区别。Apache主要负责静态解析,比如HTML。Tomcat主要负责动态分析,比如JSP。为什么要连接Apache和Tomcat?有几个原因:提高静态文件的处理性能使用web服务器进行应用的负载均衡和容错无缝升级Apache和Tomcat集成的原理:Apache负责处理HTML静态内容Tomcat负责处理动态内容在其他一句话:Apache是??一辆汽车,可以装下html等一些东西,但是装不下水。要盛水,就必须有一个桶(容器),这个桶也可以单独放在卡车上,这个桶就是Tomcat。ApacheHTTPServer与TomcatJK的三种连接方式编译生成mod_jk模块在apache中加载mod_jk并进行配置修改tomcat中的配置,使其能够接受mod_jk的转发编译生成mod_jk.so,然后复制到httpd中加载模块的默认目录/etc/httpd/modulesyuminstallhttpd-devel-y#编译生成依赖apxs的apache扩展,如果没有安装先安装wgethttp://mirrors.hust.edu.cn/apache/tomcat/tomcat-连接器/jk/tomcat-connectors-1.2.42-src.tar.gztar-zxftomcat-connectors-1.2.42-src.tar.gzcdtomcat-connectors-1.2.42-src/native/./configure--with-apxs=/usr/sbin/apxsmakecp./apache-2.0/mod_jk.so/etc/httpd/modules/https://tomcat.apache.org/download-connectors.cgiJK通过AJP协议与Tomcat服务器通信,Tomcat默认AJP连接器的端口是8009。JK本身提供了一个监控管理页面jkstatus。通过jkstatus可以监控JK当前的工作状态,并建立与tomcat的连接,如下图所示:JK配备了两个连接,分别连接到8109和8209端口,也可以使用jkstatus的管理功能,将JK切换到不同的Tomcat。例如,启用s2并禁用s1。JK的配置中最关键的文件有3个,分别是httpd.confApache服务端配置文件,用于加载JK模块以及指定JK配置文件信息workers.properties到Tomcat服务端的连接定义文件。Workers实际上属于Tomcat的连接器(Connector),代表一个Tomcat实例。这个实例代表了某种网络服务器对servlet程序的执行。比如我们可以使用服务器,比如apache,将servelet请求转发给Tomcat进程(worker)进行后台处理。Tomcatworkers在名为workers.properties的属性文件中定义,workers规范说明了它们应该如何使用。可以通过属性文件为TomcatWeb服务器插件定义Worker。(conf/下有一个workers.properties文件,是可用的Workers属性文件)worker.list=worker.list=worker1,worker2启动服务器时,Web服务器插件将实例化名称出现在worker.list属性中的worker,这些是可用于映射请求的workerWorkers类型。对于每个有名字的工作人员,将有几个条目供用户为工作人员本身提供有关的附加信息。此信息包括工作人员的类型以及与其关联的工作人员的相关信息。JK1.2.5包括以下worker类型:类型描述ajp12此worker知道如何使用ajpv12协议将请求传递给worker以进行外部处理。ajp13worker知道如何使用ajpv13协议将请求传递给worker以进行外部处理。lb这是一个负载均衡worker;它知道如何提供具有一定容错性的基于负载的粘性循环。status这是一个用于管理负载均衡的状态工作者。sticky_session指定是否应将具有会话线程ID的请求发送回同一个Tomcatworker。uriworkermap.propertiesURI映射文件,用于指定Tomcat处理哪些URL,配置httpd.conf接下来,我们在Apache的conf目录下新建两个文件,分别是workers.properties和uriworkermap.properties。这两个文件的内容大致如下。首先,我们配置了两个ajp13类型的worker,分别是s1和s2,分别指向运行在同一台服务器上的两个不同端口8109和8209上的Tomcat。接下来我们配置一个lb类型的worker(意思是负载均衡),名字叫ZYKJ,是一个逻辑worker,用来管理之前配置的两个物理连接s1和s2。最后配置一个status类型的worker,这是一个用来监控JK本身的模块。有这三个worker是不够的,我们还需要告诉JK哪些worker是可用的,所以就有了worker.list=ZYKJ,status配置这行。接下来是URI映射配置。我们需要指定哪些链接由Tomcat处理,哪些由Apache直接处理。所有请求都由workerZYKJ处理,但也有一些例外。/jkstatus请求由statusThisworker处理。感叹号表示后面的URI不应该被JK处理,即Apache直接处理所有的图片、css文件、js文件、静态html文本文件。通过workers.properties和uriworkermap.properties的配置,可以有多种组合来满足我们之前对一个网站的需求。2.http_proxy这个是利用Apache自带的mod_proxy模块,使用代理技术连接Tomcat。http_proxy模式是基于HTTP协议的代理,所以需要Tomcat提供HTTP服务,也就是说必须开启Tomcat的HTTPConnector。最简单的配置如下。在这个配置中,我们将所有http://localhost的请求都代理到http://localhost:8080/,也就是Tomcat的访问地址,除了images、css、js目录。我们也可以使用mod_proxy来做负载均衡,再看下面的配置3.ajp_proxyajpproxy的连接方式其实和httpproxy的方式是一样的,都是mod_proxy提供的功能。配置相同,只是将http://换成ajp://,连接Tomcat的AJPConnector所在的端口即可。上面例子的配置可以改为:使用代理连接方式,需要在Apache上加载需要的模块,mod_proxy相关模块包括mod_proxy.so、modproxyconnect.so、modproxyhttp.so、modproxyftp.so、modproxyajp.so至于JK的连接方式,后两者在配置上都比较简单,灵活性上一点也不逊色。但在稳定性方面,不如JK久经考验。如果应用于重点互联网站点,建议使用JK连接方式。