温馨提示×

Apache如何优化PHP运行环境

小樊
45
2025-12-28 17:53:13
栏目: 编程语言

Apache PHP运行环境优化实操指南

一 架构与模块选择

  • 优先采用 PHP-FPM + mod_proxy_fcgiApache 事件MPM(event) 的组合,获得更好的并发与资源利用;若使用线程不安全的扩展或老旧组件,可退回 prefork + mod_php
  • Ubuntu/Debian 建议启用模块:rewrite、deflate、expires、cache;CentOS/RHEL 按需启用同等功能模块。
  • 确认与切换 MPM(示例):
    • 查看:apache2ctl -V | grep -i mpm
    • 切换:a2dismod mpm_prefork && a2enmod mpm_event && systemctl restart apache2
  • 使用 PHP-FPM 时,Apache 以 proxy:fcgi://127.0.0.1:9000proxy:unix:/run/php/phpX.Y-fpm.sock|fcgi://localhost 方式转发 PHP 请求。

二 Apache 关键调优

  • 启用长连接与压缩缓存:
    • KeepAlive:OnMaxKeepAliveRequests 100KeepAliveTimeout 5
    • 压缩与过期:启用 mod_deflate、mod_expires 为文本、CSS、JS、图片等设置合适的压缩与缓存策略。
  • 事件 MPM 示例(路径因系统而异,如 /etc/apache2/mods-enabled/mpm_event.conf):
    <IfModule mpm_event_module>
        StartServers            2
        MinSpareThreads         25
        MaxSpareThreads         75
        ThreadLimit             64
        ThreadsPerChild         25
        MaxRequestWorkers       150
        MaxConnectionsPerChild  0
    </IfModule>
    
  • Prefork MPM 示例(使用 mod_php 时常见):
    <IfModule mpm_prefork_module>
        StartServers          5
        MinSpareServers       5
        MaxSpareServers      10
        MaxRequestWorkers    150
        MaxConnectionsPerChild 10000
    </IfModule>
    
  • 并发上限估算思路:MaxRequestWorkers ≈ 可用内存 / 单进程内存。例如:可用内存 8GB、单 PHP-FPM 进程约 50MB,理论值约 160,实际建议留有余量(如 120–150)并逐步压测校准。

三 PHP 与 OPcache 配置

  • 启用并校准 OPcache(生产建议):
    [opcache]
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=10000
    opcache.validate_timestamps=0     ; 生产建议关闭文件时间戳校验
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    
  • php.ini 常用安全与性能项:
    • memory_limit=128M~256M(按应用调优)
    • max_execution_time=30(长任务考虑异步/队列)
    • upload_max_filesize=20Mpost_max_size=32M(按业务需求)
    • 生产环境:display_errors=Offlog_errors=Onerror_log=/var/log/php_errors.log
  • 安装扩展(按需):php-mysqlnd、php-curl、php-gd、php-mbstring、php-xml、php-zip、php-opcache

四 PHP-FPM 进程与通信

  • 安装与启用对应版本的 phpX.Y-fpm,并在 Apache 虚拟主机或全局配置中转发 PHP:
    • TCP:SetHandler "proxy:fcgi://127.0.0.1:9000"
    • Unix Socket:SetHandler "proxy:unix:/run/php/phpX.Y-fpm.sock|fcgi://localhost"
  • 进程管理(/etc/php/X.Y/fpm/pool.d/www.conf):
    [www]
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    pm.max_requests = 500
    listen = 127.0.0.1:9000
    ; 或使用 Unix Socket:
    ; listen = /run/php/phpX.Y-fpm.sock
    
  • 调参要点:
    • pm.max_children 依据“可用内存 / 单进程内存”估算,并预留系统与其他服务内存。
    • 波动大可用 dynamic,追求极致稳定且内存充足可用 staticondemand 省内存但冷启动慢。
    • 设置 request_terminate_timeout(如 30–60s)避免慢请求拖垮进程池。

五 缓存、数据库与监控落地

  • 应用层缓存:引入 Redis/Memcached 缓存查询结果、页面片段与会话,降低数据库与后端负载。
  • 页面与静态资源:启用 mod_expires 设置 Cache-Control/Expires 头;启用 mod_deflate 进行 Gzip 压缩,减少传输体积。
  • 数据库优化:为高频查询建立合适索引、避免全表扫描,合理设置缓冲池(如 InnoDB buffer pool),并进行定期维护。
  • 监控与剖析:
    • 系统/连接:htop、top、apachetop
    • APM/性能剖析:New Relic、Blackfire
    • 日志与告警:集中分析 Apache 访问/错误日志PHP-FPM 慢日志,结合业务指标设置阈值告警。

0