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 的部分功能存在重叠。本文比较二者的职责,并说明何时适合使用连接器或反向代理。

目录

  1. 为什么将 Apache HTTP Server 与 Tomcat 配合使用?
  2. Apache HTTP Server 的功能
  3. Tomcat 的功能
  4. 架构方面的考虑
  5. 总结

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 与反向代理层能够满足明确需求时才组合使用二者;否则应保留更简单的直接部署架构。

■技术文章

查看全部技术文章。


■作者简介

查看作者简介。


■联系我们

就本文内容联系我们。