强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Apache 简介与架构

Apache 简介与架构

Apache HTTP Server 是世界上使用最广泛的 Web 服务器软件之一,自 1995 年以来一直在互联网基础设施中扮演重要角色。

1. 历史背景

1.1 起源与发展

Apache 最初由 NCSA httpd 服务器发展而来,名称源自 “A Patchy Server”(一个补丁服务器)。

年份里程碑
1995Apache 0.6 发布
1996成为最流行的 Web 服务器
1999Apache 基金会成立
2002Apache 2.0 发布,引入 MPM 架构
2005Apache 2.2 发布
2012Apache 2.4 发布(当前主要版本)

1.2 市场地位

根据 Netcraft 调查,Apache 长期占据 Web 服务器市场份额的 30-40%。

2. 核心架构

2.1 模块化设计

Apache 采用高度模块化的架构:

┌─────────────────────────────────────┐
│           Apache 核心                │
├─────────────────────────────────────┤
│  MPM (Multi-Processing Module)      │
├─────────────────────────────────────┤
│  功能模块 (mod_*)                   │
├─────────────────────────────────────┤
│  过滤器 (Filters)                   │
├─────────────────────────────────────┤
│  协议处理                           │
└─────────────────────────────────────┘

2.2 请求处理流程

  1. 连接接收:监听端口,接受 TCP 连接
  2. 请求解析:解析 HTTP 请求头
  3. URL 映射:将 URL 映射到文件系统
  4. 访问控制:检查访问权限
  5. 内容生成:读取文件或调用处理程序
  6. 响应发送:发送 HTTP 响应
  7. 日志记录:记录访问日志

3. 多处理模块(MPM)

MPM 是 Apache 2.x 的核心特性,决定了如何处理并发连接。

3.1 常见 MPM 类型

MPM描述适用场景
prefork预派生进程模型需要稳定性的传统应用
worker多进程多线程模型高并发场景
event事件驱动模型高并发长连接
winntWindows 专用Windows 平台

3.2 MPM 配置示例

# 查看当前 MPM
apachectl -V | grep MPM

# 配置 MPM (httpd.conf)
<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

3.3 MPM 选择指南

# 性能测试对比
ab -n 10000 -c 100 http://localhost/

# 监控进程/线程
ps aux | grep httpd
pstree -p | grep httpd

选择建议:

  • Linux/Unix:优先选择 event MPM(Apache 2.4+)
  • Windows:只能使用 winnt MPM
  • PHP mod_php:必须使用 prefork MPM
  • PHP-FPM:可以使用 workerevent MPM

4. 与 Nginx 的对比

4.1 架构差异

特性ApacheNginx
架构进程/线程模型事件驱动模型
并发处理每个连接一个进程/线程单线程异步处理
内存使用较高较低
动态内容内置支持(mod_php)需要外部处理器
配置语法指令式声明式
模块加载动态/静态编译时静态
.htaccess支持不支持

4.2 性能对比

# 测试静态文件性能
# Apache
ab -n 10000 -c 100 http://apache-server/index.html

# Nginx
ab -n 10000 -c 100 http://nginx-server/index.html

# 测试动态内容性能
# Apache + mod_php
ab -n 1000 -c 50 http://apache-server/info.php

# Nginx + PHP-FPM
ab -n 1000 -c 50 http://nginx-server/info.php

4.3 适用场景

选择 Apache 当:

  • 需要 .htaccess 分布式配置
  • 使用 mod_rewrite 复杂重写规则
  • 需要精细的访问控制
  • 运行传统 PHP 应用(mod_php)
  • 需要模块热加载

选择 Nginx 当:

  • 高并发静态文件服务
  • 反向代理负载均衡
  • 微服务网关
  • 资源受限环境
  • 纯 API 服务

4.4 混合部署

客户端 → Nginx (前端代理) → Apache (后端应用)
# Nginx 配置示例
upstream apache_backend {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://apache_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        root /var/www/static;
        expires 30d;
    }
}

5. 业务场景

5.1 传统企业网站

  • 使用 Apache + mod_php 运行 WordPress、Drupal 等 CMS
  • 利用 .htaccess 实现 URL 重写和访问控制

5.2 共享主机环境

  • Apache 的虚拟主机和 .htaccess 支持非常适合共享主机
  • 每个用户可以独立配置自己的站点

5.3 开发测试环境

  • Apache 的配置灵活性适合开发调试
  • 模块热加载便于功能测试

6. 注意事项

  1. MPM 选择:生产环境务必选择合适的 MPM,默认的 prefork 性能较差
  2. 模块精简:只加载必要的模块,减少攻击面
  3. 版本选择:推荐使用 Apache 2.4.x,2.2 已停止维护
  4. 安全更新:定期检查并应用安全补丁

7. 扩展阅读

8. 总结

Apache HTTP Server 作为一个成熟的 Web 服务器,具有以下优势:

  • 模块化架构,功能丰富
  • 配置灵活,支持分布式配置
  • 社区活跃,文档完善
  • 兼容性好,应用广泛

在选择 Web 服务器时,应根据具体需求、团队技术栈和运维能力综合考虑。Apache 和 Nginx 并非互斥,混合部署往往是最佳实践。