Apache HTTP Server
老牌 Web 服务器,模块多、配置灵活、生态最深
Apache 是 90 年代至今的 Web 服务器元老,LAMP 里的那个 A。它的设计是“每个连接占一个进程/线程”,简单直接,配合 .htaccess 和 100 多个模块能实现各种定制需求。今天它更多出现在传统企业应用和共享主机场景。
它解决什么问题
一个跑了十年的 PHP 系统,用 .htaccess 做了大量 URL 重写和权限控制,迁移到别的服务器要重写所有规则。
真实场景:典型场景:公司官网和内部系统跑在 Apache + PHP 上,用 .htaccess 做伪静态,用 mod_rewrite 做跳转。
核心概念
每个概念一句话 + 一个类比。点击卡片看更详细的解释。
数据流转动画
跟着步骤看一条数据从进入系统到被处理完的完整路径,可以暂停、重播和调速。
prefork 模型下请求如何占用子进程
← 左右滑动查看完整流程图 →
客户端 1 建立连接,master 从空闲池挑一个子进程处理。
提示:每个连接独占一个子进程;连接数上来后,内存和进程切换成为瓶颈。 悬停图中的节点可以看概念解释。
优劣势
短句说清适合什么、不适合什么,选型时先看这一栏。
- 模块生态最丰富,几乎什么需求都有现成模块
- .htaccess 让共享主机和目录级配置非常灵活
- 文档和社区资料极多,老系统兼容性好
- 和 PHP 集成成熟(mod_php)
- 高并发下内存占用大,C10K 场景吃力
- 每连接一进程/线程,上下文切换开销高
- 配置分散(httpd.conf + .htaccess),排查链路长
- 新项目基本被 Nginx 取代
常见使用场景
每个场景都配一句「为什么用它」。
传统 PHP 应用
WordPress、老旧 ERP 这类依赖 .htaccess 的系统。
为什么用它:迁移成本高,Apache 是最省事的选择。
内部管理系统
访问量不大但需要各种模块定制的场景。
为什么用它:并发压力小,模块丰富带来的灵活性更有价值。
Nginx 后面的应用服务器
Nginx 做入口,Apache 跑业务,各取所长。
为什么用它:入口层要扛并发,应用层要兼容老配置。
同类对比
和同赛道的组件并排看,差异一目了然。
Nginx 在前做入口,Apache 在后跑应用,是很多存量系统的现实选择。新架构基本只用 Nginx。
常见问题
上手第一个月最容易卡住的地方。
Q1Nginx 和 Apache 怎么选?
新项目、高并发、静态资源多、要做反代,选 Nginx;依赖 .htaccess、模块定制、老 PHP 系统,留 Apache。也可以 Nginx 在前做入口,Apache 在后跑应用。
Q2prefork 和 worker 有什么区别?
prefork 每连接一进程,稳定但吃内存,适合非线程安全的模块(如老版 mod_php);worker 每连接一线程,内存更省,适合高并发。现在多用 event MPM。
Q3.htaccess 有什么坑?
每次请求都会读取并解析,目录深了性能下降明显;AllowOverride 开太大有安全风险。生产环境建议把规则写进主配置。