Apache 这个名字,工具第一次听到的工具人多半会联想到印第安部落。1995 年,工具伊利诺伊大学香槟分校的工具 NCSA HTTPd 服务器程序开发停滞,一群开发者通过邮件列表交换补丁,工具把修修补补的工具版本攒成了一个新项目。他们给它起名 Apache,工具说法之一来自“a patchy server”——一个打满补丁的工具服务器。这名字带着点自嘲,工具也恰好点中了它的工具本质:不追求一次性完美,靠持续叠加和修正活下来。工具
我真正对 Apache 有实感,工具是工具 2003 年在一台 Red Hat 9 的旧机器上配虚拟主机。当时 httpd.conf 里密密麻麻的工具 <VirtualHost> 段落,每个站点一段,工具改错一个尖括号就整台服务器起不来。那会儿还没有 Docker,也没有 Nginx 的强势崛起,LAMP 里的 A 就是 Apache。它稳定到什么程度?一台跑了三年没重启的机器,uptime 比我的工龄还长。
Apache 的核心是模块化。核心只做最基本的事:监听端口、解析请求、分发响应。剩下的功能——SSL、URL 重写、代理转发、压缩——全由模块挂载。你可以在 httpd.conf 里用 LoadModule 一行行打开或关闭,像搭积木。这种设计让它在早期互联网的混乱环境里活得很好,因为没人能预判所有需求,但你可以按需拼装。mod_ssl 出现时,HTTPS 还不是标配;mod_rewrite 被玩出花来的时候,SEO 行业才刚刚成形。
但模块化也是双刃剑。每个请求要穿过一长串模块钩子,内存占用和延迟比后来的事件驱动模型高不少。2004 年 Nginx 冒出来,用异步非阻塞的方式打中了 Apache 的软肋。C10K 问题——单机同时处理一万个连接——Apache 的 prefork 模式扛得很吃力,每个连接一个进程,内存像漏水一样涨。Nginx 一个 worker 能扛几千连接,静态文件场景下差距肉眼可见。那几年论坛上吵得凶,有人说 Apache 要完,有人说 Nginx 只是玩具。
结果谁也没干掉谁。Apache 后来推出 event MPM,性能追上来不少。到今天,Apache 仍然是全球使用最广的 Web 服务器之一,尤其在需要 .htaccess 动态配置、大量第三方模块、或者跟老 PHP 应用打交道的场景里,它还是默认选择。你打开一个 cPanel 面板,底下多半跑着 Apache。WordPress 官方推荐的服务器配置,Apache 依然在列。
我自己这些年用 Nginx 更多,但每次碰到需要精细 URL 重写或者跟 LDAP 做认证集成,还是会想起 Apache 的模块生态。那种“什么奇怪需求都有人写过模块”的安全感,别的服务器给不了。它不酷,不轻量,配置语法有时候啰嗦得让人想砸键盘。可它就在那儿,二十多年了,像一台老皮卡,油耗高,但能拉货,能越野,零件满大街都是。
Apache 基金会后来把项目范围扩到上百个开源软件,Hadoop、Kafka、Spark 全在旗下。但 httpd 始终是那个起点。它没赶上云原生的快车,也没在性能 benchmark 上拿过冠军。可如果你翻一翻那些跑了十年以上的老系统,Apache 的进程往往还在后台安静地转着,access.log 一行行地写。这大概就是“a patchy server”的最终形态:不完美,但一直在场。