一、为什么选择Nginx+PHP组合?
在Web服务器领域,Nginx凭借其轻量级架构和卓越的并发处理能力(单服务器可支持5万+并发连接),成为PHP应用部署的首选前端服务器。相比Apache的进程模型,Nginx采用事件驱动的非阻塞I/O架构,在内存占用和响应速度上具有显著优势:
| 指标 | Nginx | Apache (prefork) |
|---|---|---|
| 内存占用 | 2-5MB/连接 | 10-30MB/进程 |
| 静态文件处理 | 20,000 req/sec | 3,000 req/sec |
| PHP请求延迟 | 2-5ms | 10-20ms |
二、核心配置详解
1. PHP-FPM进程管理配置
在/etc/php-fpm.d/www.conf中优化以下参数:
2. Nginx虚拟主机配置
三、性能调优技巧
1. PHP-FPM优化策略
- OPcache加速:在php.ini中启用并配置:
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000
- 进程数计算:对于4GB内存服务器,建议设置:
pm.max_children = (4096 - 512) / 30 ≈ 119
2. Nginx高级配置
四、常见问题解决方案
检查:1) PHP-FPM是否运行 2) socket文件权限 3) Nginx用户是否有访问权限
解决方案:
原因:Nginx未正确识别PHP文件类型
解决方案:在server块中添加:
FAQ常见问题大全
Q1: 如何确定PHP-FPM的最佳进程数?
A1: 计算公式:((总内存 - 系统预留内存) / 单个PHP进程平均内存) * 0.7。可通过ps -ylC php-fpm --sort:rss查看进程内存占用,建议保留20%内存给系统和其他服务。
Q2: Nginx与PHP-FPM通信方式选择:socket还是TCP?
A2: 本地部署推荐Unix socket(unix:/run/php-fpm.sock),比TCP(127.0.0.1:9000)快3-5%。跨服务器通信必须使用TCP。
Q3: 如何解决PHP文件上传大小限制?
A3: 需要同时修改三个位置:
1. Nginx:client_max_body_size 50M;
2. PHP-FPM:upload_max_filesize = 50M
3. PHP-FPM:post_max_size = 50M
Q4: 如何实现PHP应用的热重启?
A4: 对于PHP-FPM:kill -USR2 $(cat /run/php-fpm/php-fpm.pid)
Nginx:nginx -s reload(平滑重载配置)
Q5: 如何监控Nginx+PHP性能?
A5: 推荐工具组合:
- Nginx:stub_status模块 + GoAccess分析
- PHP:php-fpm status页面 + New Relic APM
- 系统级:htop + netdata
香港云服务器首购