Apache和Tomcat之间的区别以及为什么它们需要一起工作。
出版日期:
更新:
技术文章 > Apache和Tomcat之间的区别以及为什么它们需要一起工作。
2026 状态和安全使用
结论:Apache HTTP Server 是通用 HTTP 服务器和反向代理;Tomcat 是自带 HTTP 连接器的 Java Web 容器。二者并非必须配套使用。只有在反向代理能带来集中管理 TLS、路由、系统集成或统一入口层等明确收益时,才有必要组合部署。
你将学到什么
- HTTP 服务、代理、Servlet 执行、静态文件、TLS 和路由分别可以由哪一层承担。
mod_proxy_http或其他受支持的连接器如何将请求转发到 Tomcat。- 如何避免仅因旧架构图中存在代理层就盲目增加组件。
适合读者:需要在直接使用 Tomcat 与采用反向代理架构之间做出选择的 Java Web 团队。
截至 2026 年的适用情况:按职责划分组件的思路仍然有效,但“Apache 和 Tomcat 必须协同工作”这一说法过于绝对。应选择能够满足安全性、可靠性、路由、可观测性和运维要求的最简架构,并明确记录信任边界和转发请求头。
安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。
官方资料
概述
Apache HTTP Server 与 Tomcat 的部分功能存在重叠。本文比较二者的职责,并说明何时适合使用连接器或反向代理。
目录
- 为什么将 Apache HTTP Server 与 Tomcat 配合使用?
- 1-1. 职责划分
- 1-2. Apache HTTP Server 的职责
- 1-3. Tomcat 的职责
- Apache HTTP Server 的功能
- 2-1. 并发处理请求
- 2-2. URL 重写
- 2-3. 基于 IP 地址的访问控制
- Tomcat 的功能
- 3-1. 使用 Java 生成动态响应
- 架构方面的考虑
- 总结
1. 为什么将 Apache HTTP Server 与 Tomcat 配合使用?
两者的主要职责不同。Apache HTTP Server 用于提供 HTTP 内容,也可作为反向代理;Tomcat 用于运行 Java Servlet 和 JSP 应用。系统既可以单独使用其中之一,也可以在独立代理层确有价值时组合使用。
Tomcat 自带 HTTP 连接器,因此 Apache HTTP Server 并不是必需组件。常见的组合理由包括集中管理 TLS、虚拟主机路由、访问控制、静态文件分发,以及接入现有 Web 入口层。
1-1. 职责划分
可以用应用服务器与数据库的关系来类比。应用可以把少量数据保存在文件中,但当查询、一致性和管理能力具有价值时,通常会使用数据库。同样,Tomcat 可以直接提供 HTTP 服务;只有在反向代理与入口管理能够简化运维时,才需要单独部署 HTTP 服务器。
这属于架构选择,不存在适用于所有系统的固定优缺点清单。增加一层组件前,应评估所需功能、故障模式、维护成本和信任边界。
1-2. Apache HTTP Server 的职责
Apache HTTP Server 接收 HTTP 请求,可以直接返回响应,也可以将请求转发给其他服务。模块可提供以下功能:
- 根据地址或其他请求属性允许或拒绝访问;
- 重定向或重写指定 URL;
- 终止 TLS 连接;
- 提供静态内容;
- 将请求路由或代理到应用服务器。
Apache 也可以通过相应模块或应用生成动态响应。组件边界应由运维需求决定,而不是简单规定“静态内容必须由 Apache 提供、动态内容必须由 Tomcat 提供”。
1-3. Tomcat 的职责
Apache Tomcat 是 Servlet 容器和 Java Web 服务器。它接收请求,运行映射到该请求的 Java Web 应用,再返回处理结果。典型工作包括:
- 验证请求数据并保存应用记录;
- 生成动态页面或 API 响应;
- 验证用户身份并执行针对用户的处理。
Tomcat 也能提供静态文件。对于小型部署,将静态文件保留在应用中可能最简单;只有在独立 Web 层或内容分发层能够解决实际运维问题时,才应将其移出。
2. Apache HTTP Server 的功能
Apache 通过模块提供多种功能。加载模块并完成配置后即可使用相应功能。下面列出相关模块。
2-1. 并发处理请求
Apache 使用多处理模块(MPM),例如 mpm_prefork、mpm_worker 或 mpm_event。各 MPM 采用不同的进程和线程模型,并非在所有环境中都能直接互换。
下面这个历史 prefork 示例定义了进程池限制:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
StartServers 5 表示启动时创建 5 个子进程,MaxRequestWorkers 250 表示同时处理请求数的上限。其他指令用于控制空闲进程和进程回收。实际取值应根据服务器内存和工作负载验证。
2-2. URL 重写
mod_rewrite 可以转换 URL 或返回重定向。以下示例将 HTTP 请求重定向到对应的 HTTPS URL:
<IfModule rewrite_module>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
服务器返回永久重定向后,客户端会发起新的 HTTPS 请求。在其他代理或负载均衡器之后使用此规则时,应先确认代理转发的请求头。
2-3. 基于 IP 地址的访问控制
以下历史配置只允许列出的三个网段访问:
<Directory />
order deny,allow
deny from all
allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
</Directory>
Order、Deny 和 Allow 属于 Apache 2.2 兼容语法。新建 Apache 2.4 配置时通常应使用 Require ip;改写该示例前请查阅当前访问控制文档。
3. Tomcat 的功能
Tomcat 运行 Java Web 应用,并通过 HTTP 或与代理相连的连接器提供服务。
3-1. 使用 Java 生成动态响应
部署在 Tomcat 中的应用可以使用 Java 库完成以下工作:
- 根据经过验证的请求参数生成响应;
- 写入结构化应用日志;
- 创建或编辑电子表格文件;
- 检查归档文件的元数据。
这些 Java 库是应用依赖项,并不是 Apache HTTP Server 模块。Tomcat 提供的是运行这些应用的 Servlet 容器及其运行时集成。
4. 架构方面的考虑
Apache HTTP Server 与 Apache Tomcat 是 Apache 软件基金会旗下的两个独立项目。虽然二者都能处理 HTTP,但运行时、发布周期、配置方式和主要用途均不相同。
Tomcat 内置的 Web 服务器功能包括:
- TLS 连接器;
- 服务器端包含(SSI);
- URL 重写。
因此,直接对外提供 Tomcat 服务也可能是合理方案。只有在独立代理、路由、安全或运维功能确有价值时,才需要增加 Apache HTTP Server。
5. 总结
Tomcat 无需 Apache HTTP Server 也能提供 Java Web 应用。只有在专用 HTTP 与反向代理层能够满足明确需求时才组合使用二者;否则应保留更简单的直接部署架构。