CentOS 上 Nginx 与 Apache 的核心差异
一 架构与并发模型
- Nginx:采用 Master–Worker 多进程 + 事件驱动(异步非阻塞) 模型,基于 epoll/kqueue,少量 Worker 即可同时处理成千上万并发连接,连接占用内存通常为 KB 级,在长连接、高并发场景下资源更稳定。
- Apache HTTP Server:通过 MPM(多处理模块) 提供不同模型:prefork(多进程,每进程单线程)、worker(多进程多线程)、event(事件驱动,优化长连接)。传统上以同步阻塞为主,连接增多时内存与 CPU 占用上升更明显,但在中小并发与动态内容场景依然可靠。
二 静态内容、动态内容与 PHP 运行方式
- 静态内容:Nginx 在吞吐与延迟上通常更优,适合 HTML/CSS/JS/图片 等大流量分发。
- 动态内容:
- Nginx 本身不内嵌解释器,需将请求转发给后端(如 PHP-FPM、uWSGI、Node 等)处理,架构解耦、隔离性好。
- Apache 可通过模块(如 mod_php)在进程内直接执行脚本,减少进程间通信开销,传统 LAMP 场景集成简单。
- 典型结论:高并发静态资源优先用 Nginx;传统 PHP 应用或依赖进程内模块时,Apache 更直接。
三 配置与管理
- 配置风格:Nginx 配置以 server / location 等块组织,语法简洁,支持 nginx -t 语法校验与 nginx -s reload 热重载,变更对现有连接影响小。
- 分布式配置:Apache 支持 .htaccess 目录级覆盖,便于共享主机与 CMS 自助配置,但会带来路径查找与解释的性能开销;Nginx 不支持 .htaccess,强调集中式配置与性能。
- 模块机制:Apache 模块生态丰富,动态加载灵活;Nginx 模块多为静态编译进二进制,数量相对少但更高效。
四 典型性能与资源占用对比
| 维度 |
Nginx |
Apache HTTP Server |
| 架构 |
事件驱动、异步非阻塞 |
多进程/多线程(MPM),同步阻塞为主(event 优化长连接) |
| 并发能力 |
单机上万并发更易达成 |
并发受进程/线程数限制,调优后可提升但资源占用更高 |
| 静态文件 |
吞吐高、延迟低 |
性能良好,但一般低于 Nginx |
| 动态内容 |
通过 FastCGI/反向代理交由后端 |
可用模块内嵌执行(如 mod_php),减少通信开销 |
| 内存占用 |
连接占用多为 KB 级 |
每个连接占用 MB 级 更常见 |
| 配置与运维 |
配置简洁、热重载、集中式 |
.htaccess 灵活但影响性能、集中式 + 分布式并存 |
- 参考数据与经验:在部分对比中,Nginx 处理小文件静态请求可达约 8567 QPS(11.7ms),Apache 约 3245 QPS(30.8ms);Nginx+PHP-FPM 约 612 QPS(163ms,内存 124MB),Apache+mod_php 约 487 QPS(205ms,内存 156MB)。实际结果依赖硬件、系统与调优参数,建议以业务压测为准。
五 如何选择与常见部署模式
- 选择建议
- 高并发、静态资源为主、需要 反向代理/负载均衡/缓存/CDN 边缘:优先 Nginx。
- 依赖 .htaccess、需要复杂 URL 重写、传统 mod_php 一体化动态站点:优先 Apache。
- 资源受限但需承载大量并发连接:倾向 Nginx。
- 混合架构(常见且有效)
- 前端用 Nginx 处理静态与反向代理/负载均衡,后端用 Apache + mod_php(或其他语言模块)处理动态请求,既抗并发又保留 Apache 的动态能力与生态。