中间件速查手册
Web 服务器 · apache

Apache HTTP Server

老牌 Web 服务器,模块多、配置灵活、生态最深

Web 服务器Apache-2.0C学习难度:入门

Apache 是 90 年代至今的 Web 服务器元老,LAMP 里的那个 A。它的设计是“每个连接占一个进程/线程”,简单直接,配合 .htaccess 和 100 多个模块能实现各种定制需求。今天它更多出现在传统企业应用和共享主机场景。

01

它解决什么问题

一个跑了十年的 PHP 系统,用 .htaccess 做了大量 URL 重写和权限控制,迁移到别的服务器要重写所有规则。

真实场景:典型场景:公司官网和内部系统跑在 Apache + PHP 上,用 .htaccess 做伪静态,用 mod_rewrite 做跳转。

02

核心概念

每个概念一句话 + 一个类比。点击卡片看更详细的解释。

03

数据流转动画

跟着步骤看一条数据从进入系统到被处理完的完整路径,可以暂停、重播和调速。

Flow animation

prefork 模型下请求如何占用子进程

客户端 1请求 A客户端 2请求 B客户端 3请求 CApachemaster + 子进程池子进程 1busy子进程 2busy子进程 3idlelisten 队列排队等待

← 左右滑动查看完整流程图 →

01 / 05
1. 请求 1 到达

客户端 1 建立连接,master 从空闲池挑一个子进程处理。

提示:每个连接独占一个子进程;连接数上来后,内存和进程切换成为瓶颈。 悬停图中的节点可以看概念解释。

04

优劣势

短句说清适合什么、不适合什么,选型时先看这一栏。

适合什么
  • 模块生态最丰富,几乎什么需求都有现成模块
  • .htaccess 让共享主机和目录级配置非常灵活
  • 文档和社区资料极多,老系统兼容性好
  • 和 PHP 集成成熟(mod_php)
不适合什么
  • 高并发下内存占用大,C10K 场景吃力
  • 每连接一进程/线程,上下文切换开销高
  • 配置分散(httpd.conf + .htaccess),排查链路长
  • 新项目基本被 Nginx 取代
05

常见使用场景

每个场景都配一句「为什么用它」。

01

传统 PHP 应用

WordPress、老旧 ERP 这类依赖 .htaccess 的系统。

为什么用它:迁移成本高,Apache 是最省事的选择。

02

内部管理系统

访问量不大但需要各种模块定制的场景。

为什么用它:并发压力小,模块丰富带来的灵活性更有价值。

03

Nginx 后面的应用服务器

Nginx 做入口,Apache 跑业务,各取所长。

为什么用它:入口层要扛并发,应用层要兼容老配置。

06

同类对比

和同赛道的组件并排看,差异一目了然。

NginxApache

Nginx 在前做入口,Apache 在后跑应用,是很多存量系统的现实选择。新架构基本只用 Nginx。

打开对比页
07

常见问题

上手第一个月最容易卡住的地方。

Q1Nginx 和 Apache 怎么选?

新项目、高并发、静态资源多、要做反代,选 Nginx;依赖 .htaccess、模块定制、老 PHP 系统,留 Apache。也可以 Nginx 在前做入口,Apache 在后跑应用。

Q2prefork 和 worker 有什么区别?

prefork 每连接一进程,稳定但吃内存,适合非线程安全的模块(如老版 mod_php);worker 每连接一线程,内存更省,适合高并发。现在多用 event MPM。

Q3.htaccess 有什么坑?

每次请求都会读取并解析,目录深了性能下降明显;AllowOverride 开太大有安全风险。生产环境建议把规则写进主配置。