温馨提示×

Apache在CentOS上如何优化PHP

小樊
32
2025-12-09 14:47:29
栏目: 编程语言

CentOS 上 Apache + PHP 的优化实践

一 架构选择与基础准备

  • 优先采用 Apache MPM event + PHP-FPM(FastCGI),在高并发下较 mod_php 更省内存、更稳定;安装组件示例:sudo yum install httpd php-fpm -y
  • 启用必要模块:mod_proxymod_proxy_fcgimod_deflate;按需启用缓存与过期模块:mod_cachemod_expires
  • 启动与开机自启:sudo systemctl enable --now httpd php-fpm;放行防火墙:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
  • 保持系统与组件更新:sudo yum update -y,及时获得安全与性能修复。

二 Apache 关键调优

  • 连接与复用
    • 开启长连接:KeepAlive On;建议 MaxKeepAliveRequests 100KeepAliveTimeout 5(按业务 RTT 微调)。
  • 并发与进程模型(MPM event 示例)
    • 核心并发:MaxRequestWorkers 150(示例值,需结合内存与压测校准)。
    • 启动与弹性:StartServers 5MinSpareServers 5MaxSpareServers 10
    • 稳定性控制:MaxRequestsPerChild 0(不限制生命周期,视内存泄漏情况可改为 10000+)。
  • 传输与缓存
    • 启用压缩:在虚拟主机或全局配置中加入
      <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
      </IfModule>
      
    • 启用缓存与过期:按需启用 mod_cache/mod_expires,为静态资源设置合理 Cache-ControlExpires 头。

三 PHP 与 PHP-FPM 调优

  • 启用并配置 OPcache(建议写入 /etc/php.d/opcache.iniphp.ini
    [opcache]
    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
    
  • PHP 运行时参数(按应用需求调整)
    • memory_limit = 128M(示例);max_execution_time = 30;上传相关:upload_max_filesize = 20Mpost_max_size = 20M
  • PHP-FPM 进程池(示例值,需压测校准)
    • 监听:listen = /run/php-fpm/www.sock(或 127.0.0.1:9000);user = apachegroup = apache
    • 动态管理:pm = dynamicpm.max_children = 50pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35request_terminate_timeout = 30s
  • 将 PHP 请求转发至 PHP-FPM(虚拟主机示例)
    <FilesMatch \.php$>
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
    
    如使用 Unix Socket,可写为:SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/var/www/html"

四 数据库与缓存层优化

  • 数据库:为高频查询字段建立合适索引,避免 SELECT *,优化慢查询;合理设置连接池与超时;必要时使用持久连接降低握手开销。
  • 应用缓存:引入 RedisMemcached,缓存热点数据、配置与页面片段,显著降低数据库压力。
  • 内容分发:将静态资源(图片、CSS、JS、视频)托管至 CDN,减少源站带宽与时延。

五 监控、压测与迭代

  • 监控与状态:启用 mod_status 观察 BusyWorkersIdleWorkers、请求耗时等;结合 top/htopvmstatiostat 定位 CPU、内存、I/O 瓶颈。
  • 压测与校准:使用 ab(Apache Bench)或 wrk 进行基准测试,围绕 MaxRequestWorkerspm.max_childrenKeepAliveTimeout 等参数迭代;逐步加压并观察错误率、P95/P99 延迟与内存占用。
  • 变更流程:任何参数调整前备份配置,先在非生产环境验证;上线后持续观察并滚动微调。

0