Apache 简介 #

什么是 Web 服务器? #

在了解 Apache 之前,我们需要先理解 Web 服务器的基本概念。

text
┌─────────────────────────────────────────────────────────────┐
│                    Web 服务器的本质                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────┐     HTTP 请求     ┌─────────┐                │
│   │  浏览器  │ ───────────────> │Web服务器 │                │
│   └─────────┘                  └─────────┘                │
│                                     │                       │
│                                     ▼                       │
│                               ┌─────────┐                  │
│                               │ 静态文件 │                  │
│                               │ 动态内容 │                  │
│                               │ 数据库   │                  │
│                               └─────────┘                  │
│                                                             │
│   核心功能:                                                 │
│   - 接收 HTTP 请求                                          │
│   - 处理请求并返回响应                                       │
│   - 提供静态文件服务                                         │
│   - 执行动态内容生成                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

HTTP 请求响应流程 #

text
┌─────────────────────────────────────────────────────────────┐
│                    HTTP 通信流程                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   客户端(浏览器)              服务器(Apache)              │
│        │                            │                       │
│        │ 1. 建立 TCP 连接           │                       │
│        │ ─────────────────────────> │                       │
│        │                            │                       │
│        │ 2. 发送 HTTP 请求          │                       │
│        │ ─────────────────────────> │                       │
│        │   GET /index.html HTTP/1.1 │                       │
│        │   Host: example.com        │                       │
│        │                            │                       │
│        │ 3. 处理请求                │                       │
│        │    - 解析 URL              │                       │
│        │    - 查找文件              │                       │
│        │    - 执行脚本              │                       │
│        │                            │                       │
│        │ 4. 返回 HTTP 响应          │                       │
│        │ <───────────────────────── │                       │
│        │   HTTP/1.1 200 OK          │                       │
│        │   Content-Type: text/html  │                       │
│        │   <html>...</html>         │                       │
│        │                            │                       │
│        │ 5. 关闭连接                │                       │
│        │ <─────────────────────────>│                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

什么是 Apache? #

Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源代码的网页服务器软件。它是世界上第一个可以部署超过一亿个网站的 Web 服务器软件。

核心定位 #

text
┌─────────────────────────────────────────────────────────────┐
│                         Apache                               │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  开源免费    │  │  跨平台      │  │  模块化      │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  稳定可靠    │  │  功能丰富    │  │  社区活跃    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

Apache 名称的由来 #

Apache 这个名称有两种解释:

  1. “A Patchy Server”:最初是基于 NCSA HTTPd 服务器打补丁而来
  2. Apache 部落:以北美原住民 Apache 部落命名,象征坚韧和力量

Apache 的发展历史 #

发展历程 #

text
1995年 ─── Apache 1.0 发布
    │
    │      基于 NCSA HTTPd 开发
    │      快速成为最流行的 Web 服务器
    │
1997年 ─── Apache 1.3 发布
    │
    │      引入模块化架构
    │      支持 Windows 平台
    │
2002年 ─── Apache 2.0 发布
    │
    │      全新的架构设计
    │      支持多协议
    │      引入 APR(Apache Portable Runtime)
    │
2005年 ─── Apache 2.2 发布
    │
    │      改进的代理模块
    │      更好的缓存支持
    │
2012年 ─── Apache 2.4 发布
    │
    │      新的表达式解析器
    │      改进的虚拟主机配置
    │      更好的 WebSocket 支持
    │
至今   ─── 持续更新
    │
    │      安全更新
    │      性能优化
    │      新特性添加

版本特性对比 #

版本 发布时间 主要特性
1.0 1995 基础 HTTP 服务
1.3 1997 模块化架构、Windows 支持
2.0 2002 APR、多协议支持、MPM
2.2 2005 代理改进、缓存增强
2.4 2012 表达式解析器、WebSocket

Apache 的核心特点 #

1. 模块化设计 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Apache 模块化架构                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                    ┌─────────────┐                          │
│                    │  Apache 核心 │                          │
│                    └──────┬──────┘                          │
│                           │                                 │
│    ┌──────────────────────┼──────────────────────┐         │
│    │                      │                      │         │
│    ▼                      ▼                      ▼         │
│ ┌──────────┐        ┌──────────┐        ┌──────────┐      │
│ │ 核心模块  │        │ 扩展模块  │        │ 第三方模块│      │
│ └──────────┘        └──────────┘        └──────────┘      │
│ │ - mpm_prefork │    │ - mod_ssl    │    │ - mod_security │ │
│ │ - mpm_worker  │    │ - mod_rewrite│    │ - mod_wsgi     │ │
│ │ - mpm_event   │    │ - mod_proxy  │    │ - mod_jk       │ │
│ │ - core        │    │ - mod_php    │    │ - mod_perl     │ │
│ └──────────┘        └──────────┘        └──────────┘      │
│                                                             │
│  优势:                                                     │
│  ✅ 按需加载,节省资源                                      │
│  ✅ 功能扩展灵活                                            │
│  ✅ 第三方生态丰富                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2. 多处理模块(MPM) #

text
┌─────────────────────────────────────────────────────────────┐
│                    MPM 多处理模块                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Prefork MPM                                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  多进程模型,每个请求一个进程                          │   │
│  │  - 稳定性高,进程隔离                                 │   │
│  │  - 内存占用大                                         │   │
│  │  - 适合非线程安全模块                                  │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Worker MPM                                                 │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  多进程 + 多线程模型                                   │   │
│  │  - 内存占用较小                                       │   │
│  │  - 并发能力强                                         │   │
│  │  - 需要线程安全模块                                    │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Event MPM                                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  Worker 的改进版,事件驱动                            │   │
│  │  - 高并发性能最佳                                     │   │
│  │  - Keep-Alive 优化                                   │   │
│  │  - 推荐用于生产环境                                   │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3. .htaccess 分布式配置 #

text
┌─────────────────────────────────────────────────────────────┐
│                    .htaccess 配置                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  特点:                                                     │
│  - 目录级别的配置覆盖                                       │
│  - 无需重启服务器                                           │
│  - 适合虚拟主机用户                                         │
│                                                             │
│  典型应用:                                                 │
│                                                             │
│  # URL 重写                                                 │
│  RewriteEngine On                                           │
│  RewriteRule ^article/(.*)$ article.php?id=$1              │
│                                                             │
│  # 访问控制                                                 │
│  Order Allow,Deny                                           │
│  Allow from 192.168.1.0/24                                  │
│                                                             │
│  # 密码保护                                                 │
│  AuthType Basic                                             │
│  AuthName "Restricted Area"                                 │
│  AuthUserFile /path/to/.htpasswd                            │
│  Require valid-user                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4. 虚拟主机支持 #

text
┌─────────────────────────────────────────────────────────────┐
│                    虚拟主机类型                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  基于名称的虚拟主机(最常用)                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  一个 IP 地址,多个域名                               │   │
│  │                                                       │   │
│  │  site1.com ──┐                                        │   │
│  │              ├──> 192.168.1.100 (Apache)             │   │
│  │  site2.com ──┘                                        │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  基于 IP 的虚拟主机                                         │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  多个 IP 地址,每个 IP 对应一个站点                    │   │
│  │                                                       │   │
│  │  site1.com ──> 192.168.1.100                         │   │
│  │  site2.com ──> 192.168.1.101                         │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  基于端口的虚拟主机                                         │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  同一 IP,不同端口                                     │   │
│  │                                                       │   │
│  │  example.com:80  ──> 主站点                           │   │
│  │  example.com:8080──> 管理后台                         │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Apache 的应用场景 #

1. 静态网站托管 #

text
┌─────────────────────────────────────────────────────────────┐
│                    静态网站服务                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  适用场景:                                                 │
│  - 企业官网                                                 │
│  - 个人博客(静态)                                         │
│  - 文档站点                                                 │
│  - 图片/视频资源服务器                                      │
│                                                             │
│  配置示例:                                                 │
│  DocumentRoot /var/www/html                                 │
│  <Directory /var/www/html>                                  │
│      Options Indexes FollowSymLinks                         │
│      AllowOverride None                                     │
│      Require all granted                                    │
│  </Directory>                                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2. 动态网站部署 #

text
┌─────────────────────────────────────────────────────────────┐
│                    动态内容支持                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  PHP 应用                                                   │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  - WordPress 博客系统                                │   │
│  │  - Magento 电商平台                                  │   │
│  │  - Laravel 应用                                      │   │
│  │  配置:mod_php 或 PHP-FPM                            │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Python 应用                                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  - Django 应用                                       │   │
│  │  - Flask 应用                                        │   │
│  │  配置:mod_wsgi                                      │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  其他语言                                                   │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  - Perl:mod_perl                                    │   │
│  │  - Ruby:Passenger                                   │   │
│  │  - Java:mod_jk (Tomcat)                             │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3. 反向代理 #

text
┌─────────────────────────────────────────────────────────────┐
│                    反向代理架构                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                    ┌─────────────┐                          │
│                    │   Apache    │                          │
│                    │  反向代理    │                          │
│                    └──────┬──────┘                          │
│                           │                                 │
│          ┌────────────────┼────────────────┐               │
│          │                │                │               │
│          ▼                ▼                ▼               │
│    ┌──────────┐    ┌──────────┐    ┌──────────┐           │
│    │ Node.js  │    │  Python  │    │   Java   │           │
│    │ :3000    │    │  :8000   │    │  :8080   │           │
│    └──────────┘    └──────────┘    └──────────┘           │
│                                                             │
│  配置示例:                                                 │
│  ProxyPass /api http://localhost:3000/api                   │
│  ProxyPassReverse /api http://localhost:3000/api            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4. 负载均衡 #

text
┌─────────────────────────────────────────────────────────────┐
│                    负载均衡配置                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  <Proxy "balancer://mycluster">                             │
│      BalancerMember "http://server1:8080"                   │
│      BalancerMember "http://server2:8080"                   │
│      BalancerMember "http://server3:8080"                   │
│  </Proxy>                                                   │
│                                                             │
│  ProxyPass "/" "balancer://mycluster/"                      │
│                                                             │
│  支持的负载均衡算法:                                        │
│  - 轮询(默认)                                             │
│  - 加权轮询                                                 │
│  - 最少连接                                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Apache vs Nginx #

架构对比 #

text
┌─────────────────────────────────────────────────────────────┐
│                    架构对比                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Apache(进程/线程模型)                                     │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                                                       │   │
│  │  请求1 ──> 进程/线程1                                 │   │
│  │  请求2 ──> 进程/线程2                                 │   │
│  │  请求3 ──> 进程/线程3                                 │   │
│  │  ...                                                  │   │
│  │                                                       │   │
│  │  特点:每个连接占用一个进程/线程                       │   │
│  │                                                       │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Nginx(事件驱动模型)                                       │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                                                       │   │
│  │              ┌─────────────┐                          │   │
│  │  请求1 ───>  │             │                          │   │
│  │  请求2 ───>  │  Worker     │                          │   │
│  │  请求3 ───>  │  Process    │                          │   │
│  │  ...      │  (事件循环)   │                          │   │
│  │              └─────────────┘                          │   │
│  │                                                       │   │
│  │  特点:单线程处理多个连接                              │   │
│  │                                                       │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

功能对比 #

特性 Apache Nginx
静态文件 较好 优秀
动态内容 原生支持 需要代理
内存占用 较高 较低
并发连接 较低 极高
配置灵活性 .htaccess 集中式
模块加载 动态加载 需编译
学习曲线 平缓 中等
社区支持 成熟 活跃

选择建议 #

text
┌─────────────────────────────────────────────────────────────┐
│                    选择指南                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  选择 Apache 的场景:                                        │
│  ✅ 需要使用 .htaccess 分布式配置                           │
│  ✅ PHP 应用直接部署                                        │
│  ✅ 企业传统应用迁移                                        │
│  ✅ 需要丰富的模块生态                                      │
│  ✅ 团队对 Apache 更熟悉                                    │
│                                                             │
│  选择 Nginx 的场景:                                         │
│  ✅ 高并发静态资源服务                                      │
│  ✅ 反向代理和负载均衡                                      │
│  ✅ 微服务架构                                              │
│  ✅ 内存资源受限                                            │
│  ✅ 需要极高并发性能                                        │
│                                                             │
│  混合使用:                                                 │
│  ✅ Nginx 前端处理静态和代理                                │
│  ✅ Apache 后端处理动态内容                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Apache 的优势与局限 #

优势 #

text
✅ 成熟稳定
   - 超过 25 年发展历史
   - 经过大规模生产验证
   - 安全漏洞修复及时

✅ 功能丰富
   - 内置众多功能模块
   - 支持多种编程语言
   - 完善的文档体系

✅ 配置灵活
   - .htaccess 分布式配置
   - 目录级别权限控制
   - 无需重启生效

✅ 社区活跃
   - 大量第三方模块
   - 丰富的教程资源
   - 问题解决容易

局限性 #

text
⚠️ 性能瓶颈
   - 进程/线程模型开销大
   - 高并发下内存占用高
   - 不适合极高并发场景

⚠️ 资源消耗
   - 每个连接占用进程/线程
   - 内存使用效率较低
   - 需要更多服务器资源

⚠️ 配置复杂
   - 配置选项众多
   - 不同版本配置差异
   - 学习曲线较长

学习路径 #

text
入门阶段
├── Apache 简介(本文)
├── Apache 安装部署
├── 配置文件基础
└── 基本命令操作

进阶阶段
├── 虚拟主机配置
├── URL 重写规则
├── 反向代理设置
└── SSL/HTTPS 配置

高级阶段
├── 性能调优
├── 安全加固
├── 模块开发
└── 故障排查

下一步 #

现在你已经了解了 Apache 的基本概念,接下来学习 Apache 安装,开始在各个平台上部署 Apache!

最后更新:2026-03-29