详解Apache 和 Tomcat 整合原理及区别

Apache 和 Tomcat 都是Web服务器,它们之间既有联系又有区别。Apache主要负责静态解析,如HTML。Tomcat主要负责动态解析,如JSP。

为什么要让 Apache 与 Tomcat 之间进行连接呢?

原因有下面几个:

  • 提升对静态文件的处理性能

  • 利用 Web 服务器来做负载均衡以及容错

  • 无缝的升级应用程序

Apache 和 Tomcat整合原理:

  • Apache负责处理HTML静态内容

  • Tomcat负责处理动态内容

换而言之:Apache是一辆车,上面可以装一些东西如html等,但是不能装水,要装水必须要有桶(容器),而这个桶也可以不放在卡车上,那这个桶就是Tomcat。

Apache HTTP Server 与 Tomcat 的三种连接方式

JK

编译生成mod_jk模块

在apache中加载mod_jk并对其进行配置

在tomcat中修改配置以使其能接受mod_jk的转发

编译生成mod_jk.so,然后将其复制到httpd加载模块默认的目录/etc/httpd/modules

yum install httpd-devel -y #编译生成apache扩展依赖apxs,如未安装先安装

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz

tar -zxf tomcat-connectors-1.2.42-src.tar.gz

cd tomcat-connectors-1.2.42-src/native/

./configure --with-apxs=/usr/sbin/apxs

make

cp ./apache-2.0/mod_jk.so /etc/httpd/modules/

https://tomcat.apache.org/download-connectors.cgi

JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。

JK 本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置,如下图所示:

图中JK配了两个连接分别到 8109 和 8209 端口上,

也可以利用 jkstatus 的管理功能来切换 JK 到不同的 Tomcat 上,例如将 s2 启用,并停用 s1

JK 的配置最关键的有三个文件,分别是

  • httpd.conf

Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息

  • workers.properties

到 Tomcat 服务器的连接定义文件

Workers实际上属于Tomcat的链接器(Connector),代表了一个Tomcat实例,这个实例代表了由某种web服务器来执行 servelet程序。

举例来说,我们可以使用某个服务器,例如apache 来把servelet请求转递Tomcat进程(worker)来进行后台处理。

  • Tomcat workers都定义在一个叫做workers.properties属性文件之中,并且workers的说明告诉应该如何使用它们。

可以通过属性文件来为Tomcat Web服务器插件定义Worker。(在conf/下有个文件名为wo rkers.properties就是一个可用Workers属性文件).

worker.list=<由逗号分离开的worker名称列表>

worker.list= worker1, worker2

当启动服务器的时候,Web服务器插件会把这些出现在worker.list属性中出现名字的worker实例化,而这些也就是你可以用来映射请求的worker

Workers的类型

对于每个有名字的worker都会有若干条目给使用者提供worker自身的附加信息。这些信息包括worker的类型和与之相关的worker的信息。JK 1.2.5中包含下列的worker类型:

类型 说明

  • ajp12 这种worker知道如何使用ajpv12协议去给用来外部处理的worker传递一个请求。

  • ajp13 这种worker知道如何使用ajpv13协议去给用来外部处理的worker传递一个请求。

  • lb 这是一个负载平衡worker;它知道怎样在一定容错范围内提供一个基于粘性负载的循环。

  • status 这是一个状态worker来管理负载平衡。

  • sticky_session指明带有会话线程ID的请求是否应该被发送回到同一个Tomcat worker。

  • uriworkermap.properties

  • URI 映射文件,用来指定哪些 URL 由 Tomcat 处理

配置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 直接处理的

所有的请求都由 ZYKJ 这个 worker 进行处理,但是有几个例外,/jkstatus 请求由 status 这个 worker 处理。

感叹号表示接下来的 URI 不要由 JK 进行处理,也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件。

通过对 workers.properties 和 uriworkermap.properties 的配置,可以有各种各样的组合来满足我们前面提出对一个 web 网站的要求

Apache和Tomcat区别

Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别:

  • Apache是web服务器(仅支持静态解析,如HTML)

  • 也就是说你在服务器的目录下面丢个index.html,通过http:xxx//8080/index.html可以访问

    倘若丢个index.jsp,无法解析,无法通过http:xxx//8080/index.jsp访问

  • tomcat是java应用服务器(支持动态解析,如JSP)

  • 确切的说tomcat是轻量级应用服务器,下文会再次介绍

index.html和index.jsp均支持,但对静态文件处理的性能差,这一点不如Apache 效率高

Tomcat只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。

Apache是很最开始的页面解析服务,tomcat是后研发出来的,从本质上来说tomcat的功能完全可以替代Apache,但Apache毕竟是tomcat的前辈级人物,并且市场上也有不少人还在用Apache,所以Apache还会继续存在,不会被取代,apache不能解析java的东西,但解析html速度快

因此,由于各有优缺点,一般会整合使用:

  • 如果请求是静态网页则由Apache处理,并将结果返回;

  • 如果是动态请求,Apache会将解析工作转发给Tomcat处理,Tomcat处理后将结果通过Apache返回。

这样可以达到分工合作,实现负载均衡,提高系统的性能。

相关推荐
尢词18 小时前
SpringMVC
java·spring·java-ee·tomcat·maven
清风百草18 小时前
【04】【Maven项目热部署】将Maven项目热部署到远程tomcat服务器上
tomcat·maven项目热部署
蒋桐城1 天前
Tomcat 启动卡住,日志显示 At least one JAR was scanned for TLDs yet contained no TLDs.
java·tomcat
qiaosaifei1 天前
SpringBoot项目中替换指定版本的tomcat
spring boot·后端·tomcat
雷神乐乐2 天前
IDEA构建JavaWeb项目,并通过Tomcat成功运行
服务器·tomcat·javaweb
陈大爷(有低保)2 天前
数据库连接池JNDI
数据库·mysql·tomcat
笔墨登场说说2 天前
JDK 里面的线程池和Tomcat线程池的区别
java·servlet·tomcat
爱分享的淘金达人2 天前
25国考照片处理器使用流程图解❗
java·考研·spring·eclipse·tomcat
爱分享的淘金达人2 天前
2025年山东省考报名流程图解
java·考研·spring·eclipse·tomcat·流程图
弓弧名家_玄真君3 天前
mac 安装tomcat
java·macos·tomcat