怎样在Apache中优化PHP运行环境
导读:Apache PHP运行环境优化实操指南 一 架构与运行模式选择 优先采用 Apache MPM event + PHP-FPM(FastCGI) 的组合:event 在高并发下连接开销更低,PHP-FPM 进程管理更精细、资源利用更可控...
Apache PHP运行环境优化实操指南
一 架构与运行模式选择
- 优先采用 Apache MPM event + PHP-FPM(FastCGI) 的组合:event 在高并发下连接开销更低,PHP-FPM 进程管理更精细、资源利用更可控。若必须使用线程化 MPM(worker/event),务必搭配线程安全的 SAPI(如 PHP-FPM),避免使用 mod_php。
- Ubuntu 启用模块与切换 MPM 示例:
- 启用模块:
sudo a2enmod rewrite proxy proxy_fcgi - 查看/切换 MPM:
sudo a2enmod mpm_event & & sudo a2dismod mpm_prefork(视系统支持情况执行) - 重启服务:
sudo systemctl restart apache2 php7.x-fpm
- 启用模块:
- CentOS 启用模块与切换 MPM 示例:
- 在
/etc/httpd/conf/httpd.conf或/etc/httpd/conf.modules.d/中确保加载:mod_proxy.so、mod_proxy_fcgi.so - 切换 MPM(编辑
/etc/httpd/conf.modules.d/00-mpm.conf,启用 mpm_event 并注释 mpm_prefork) - 重启服务:
sudo systemctl restart httpd php-fpm
以上选择与配置可显著提升并发能力与稳定性,是后续所有优化的基础。
- 在
二 Apache关键配置
- 启用长连接与压缩:
- KeepAlive:
KeepAlive On、MaxKeepAliveRequests 100、KeepAliveTimeout 5 - 压缩与缓存控制:启用 mod_deflate(文本/JS/CSS 压缩)、mod_expires(静态资源过期策略)
- KeepAlive:
- 并发与超时:
- 合理设置 MaxRequestWorkers/MaxClients(结合内存与下游处理能力),避免过高导致内存耗尽或排队过长。
- 适度降低 Timeout,避免长时间占用工作进程。
- 示例(Ubuntu/CentOS 通用思路,数值需按服务器资源与业务压测微调):
- KeepAlive 与压缩:
KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 < IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript < /IfModule> < IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" < /IfModule> - 并发与超时(示例值,需压测校准):
Timeout 30 MaxRequestWorkers 150
- KeepAlive 与压缩:
每次修改后执行:sudo systemctl reload apache2(或 sudo systemctl reload httpd)以平滑生效。
三 PHP与PHP-FPM优化
- 启用并调优 OPcache(强烈建议生产环境开启):
- 编辑对应 SAPI 的 php.ini(如 FPM 通常为
/etc/php/7.x/fpm/php.ini):zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1
- 编辑对应 SAPI 的 php.ini(如 FPM 通常为
- PHP-FPM 进程管理(/etc/php/7.x/fpm/pool.d/www.conf):
- 动态方式(dynamic)常用参数:
pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 request_terminate_timeout = 30s - 计算思路(示例):若单进程常驻内存约 40MB,服务器可用内存 4GB,为系统与其他服务预留 1GB,则可用于 FPM 的内存约 3GB,可设 `pm.max_children ≈ 3GB / 40MB ≈ 75**;再结合压测与峰值 QPS 微调 start_servers / min/max_spare_servers。
- 动态方式(dynamic)常用参数:
- 基础 php.ini 安全与资源:
memory_limit = 128M max_execution_time = 30 upload_max_filesize = 50M post_max_size = 50M display_errors = Off log_errors = On error_log = /var/log/php_errors.log - 应用层缓存:引入 Redis/Memcached 降低数据库压力(安装对应扩展并在业务代码/框架中启用)。
四 部署与路由配置示例
- 将 PHP 请求通过 mod_proxy_fcgi 转发至 PHP-FPM(按实际版本与监听方式调整):
- Unix Socket(推荐,开销更低):
< FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/" < /FilesMatch> - TCP 端口:
< FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" < /FilesMatch>
- Unix Socket(推荐,开销更低):
- 确保目录权限与访问控制正确,启用 mod_rewrite 以支持框架路由。
- 重启生效:
sudo systemctl restart apache2 php7.x-fpm(或sudo systemctl restart httpd php-fpm)。
五 监控验证与持续调优
- 实时监控与压测:
- 系统/进程:
top、htop、iotop - Web 压测:
ab(Apache Bench)、wrk - PHP-FPM 状态页:启用
pm.status_path并在安全网段访问,观察active processes、idle processes、slow requests
- 系统/进程:
- 日志与诊断:
- Apache:
/var/log/apache2/access.log、/var/log/apache2/error.log(或/var/log/httpd/) - PHP-FPM:慢日志(在 pool 配置中开启
slowlog与request_slowlog_timeout) - 应用与数据库慢查询日志
- Apache:
- 方法论:先基线测量,再小步调整(如 KeepAlive、MaxRequestWorkers、pm.max_children),每次变更后回归压测与日志观察,避免“拍脑袋”式调参。
- 安全与维护:保持 Apache/PHP/扩展 为最新稳定版,最小化启用模块,定期审计错误与访问日志。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样在Apache中优化PHP运行环境
本文地址: https://pptw.com/jishu/749253.html
