ThinkPHP 5.1 程序在 Nginx 和 Apache 下的性能对比
发布: (2026年1月8日 GMT+8 10:08)
3 min read
原文: Dev.to
Source: Dev.to
核心结论(针对 TP5.1)
- 高并发场景下:Nginx 的请求处理能力(RPS)可能是 Apache(prefork 模式)的 1.5 倍到 3 倍,甚至更高。
原理分析:为什么 Nginx 更适合 TP/PHP 程序?
架构与 PHP 处理方式(最关键区别)
| 特性 | Nginx + PHP‑FPM | Apache (prefork) + mod_php |
|---|---|---|
| 进程模型 | Nginx 工作进程轻量,仅负责转发请求;PHP‑FPM 进程独立管理,数量可控 | 每个 Apache 进程同时包含 PHP 解释器,资源占用大 |
| 静态文件处理 | 原生 C 代码高效处理(CSS、JS、图片),速度极快 | 通过模块处理,性能相对较低 |
| 并发连接 | 单个 Nginx 工作进程可轻松处理上千并发连接 | 每个进程只能处理有限连接,导致并发受限 |
这对 TP5.1 意味着什么?
内存消耗
-
Nginx + PHP‑FPM
- Nginx 进程非常轻量。
- PHP‑FPM 进程虽然占用内存,但可以通过
pm.max_children等参数控制数量。 - 一个 TP5.1 应用的 PHP 进程大约占用 50 MB,10 个进程约 500 MB。
-
Apache (prefork) + mod_php
- 每个 Apache 进程都包含完整的 PHP 环境,内存占用显著更高,导致在高并发下容易耗尽资源。
静态资源
- Nginx 以原生 C 代码高效处理
/public目录下的静态文件(CSS、JS、图片),是 TP5.1 静态资源的最佳服务方式。
场景推荐方案
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 大流量生产环境 | 使用 Nginx + PHP‑FPM | 高并发处理能力强,内存占用可控,静态资源响应快 |
| 必须使用 Apache | 将 MPM 从 prefork 切换到 event,并使用 PHP‑FPM 替代 mod_php | 大幅缩小与 Nginx 的性能差距 |
如果你必须使用 Apache
将 MPM 模式切换为 event 并使用 PHP‑FPM。示例配置(httpd.conf):
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 将 PHP 请求转发给 PHP-FPM
ProxyPassMatch "^/(.*\.php)$" "fcgi://127.0.0.1:9000/path/to/your/tp5/public/$1"
优化你的 TP5.1
无论使用哪种 Web 服务器,都 务必开启 OPcache 和路由缓存,这往往带来的性能提升比更换服务器更显著。
php think optimize:route
php think optimize:config
总结
对于 TP5.1 系统,将 Apache 切换到 Nginx 往往能带来质的飞跃,尤其在用户量增长后,服务器更稳定、响应更快,并能支撑更多同时在线用户。
程序员的免费工具网站