温馨提示×

如何在Ubuntu上优化Apache

小樊
40
2025-12-19 00:56:35
栏目: 智能运维

Ubuntu 上优化 Apache 的实用步骤

一 基线检查与模块管理

  • 查看版本与编译参数:apachectl -V,确认 MPM 模块(event/worker/prefork)与服务器信息。
  • 精简模块:仅启用必需模块,减少内存与攻击面。示例:sudo a2dismod autoindexsudo a2enmod rewrite ssl
  • 目录与签名:关闭目录浏览 Options -Indexes;隐藏版本信息 ServerTokens ProdServerSignature Off
  • 典型安全与性能模块:启用压缩与缓存 a2enmod deflate expires cache cache_disk;按需启用 a2enmod headers
  • 修改后先语法检查:sudo apache2ctl configtest,再重启:sudo systemctl restart apache2
    以上做法有助于降低开销、提升安全与可维护性。

二 选择并调优 MPM(并发模型)

  • 高并发优先选用 MPM Event(或 Worker),在 Ubuntu 22.04 上通常默认是 prefork,可按需切换:
    • 切换示例:sudo a2dismod mpm_prefork && sudo a2enmod mpm_event && sudo systemctl restart apache2
  • 典型参数起点(需结合内存与压测微调):
    • MPM Event(线程化,连接复用更好)
      <IfModule mpm_event_module>
          StartServers          4
          MinSpareThreads      25
          MaxSpareThreads      75
          ThreadsPerChild      25
          MaxRequestWorkers    150
          MaxConnectionsPerChild 1000
      </IfModule>
      
    • MPM Prefork(进程化,兼容传统模块如 mod_php)
      <IfModule mpm_prefork_module>
          StartServers          5
          MinSpareServers       5
          MaxSpareServers      10
          MaxClients          150
          MaxRequestsPerChild   0
      </IfModule>
      
  • 调优思路:
    • 以“单进程/线程内存占用 × MaxRequestWorkers/MaxClients”不超过可用内存为原则;
    • 动态站点(如 PHP)若使用 mod_php,每个进程内存占用较高,应降低进程数或改用 PHP-FPM
    • 压测工具如 ab/jmeter 配合 top/htop/netstat 观察瓶颈并迭代参数。
      上述配置与方法是提升并发与资源效率的核心。

三 连接、超时与压缩缓存

  • 长连接复用:
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 2
    
  • 请求超时:将 Timeout 设为较低值(如 5–15 秒)以避免慢客户端占用连接;静态资源可适当更低。
  • 压缩传输:启用 mod_deflate,对文本类资源压缩,避免对图片等已压缩格式再压缩。
  • 浏览器缓存:启用 mod_expires,为静态资源设置长期过期:
    <IfModule mod_expires.c>
      ExpiresActive On
      ExpiresByType image/jpg  "access plus 1 month"
      ExpiresByType text/css  "access plus 1 week"
      ExpiresByType application/javascript "access plus 1 week"
    </IfModule>
    
  • 页面级缓存:启用 mod_cache/mod_cache_disk,对可缓存内容做磁盘缓存:
    CacheRoot "/var/cache/apache2/mod_cache_disk"
    CacheEnable disk /
    CacheDirLevels 2
    CacheDirLength 1
    CacheIgnoreHeaders Set-Cookie
    

这些设置可显著降低带宽、减少后端计算与磁盘 I/O。

四 动态内容优化与安全加固

  • 动态语言与进程模型:尽量用 PHP-FPM(或 uWSGI/Gunicorn 等)替代 mod_php,使 Apache 回归静态/反向代理角色,显著降低单进程内存占用并提升并发承载。
  • 静态资源减负:将图片、视频、下载等大文件交由 CDNNginx 反向代理/静态站点承载,减少 Apache 压力。
  • 安全与抗攻击:按需启用 ModSecurity(WAF,可配合 OWASP CRS 规则集)与 mod_evasive(抗 DoS),并配置日志目录权限。
  • 自动化体检:使用 Apache2Buddy 脚本快速评估与给出优化建议:curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | sudo perl
    这些措施能在高并发下保持稳定性与安全性。

五 监控验证与持续迭代

  • 实时监控:top/htop 观察 CPU/内存负载netstat -anp | grep :80ss -s 查看连接状态,tail -f /var/log/apache2/error.log 跟踪错误。
  • 压测与回归:使用 ab(如 ab -n 10000 -c 200 http://yourdomain/)或 jmeter 进行基线压测,验证 吞吐、延迟、错误率 与资源占用,再微调 MPM/KeepAlive/缓存 等参数。
  • 变更流程:每次修改先 apache2ctl configtest,再滚动重启;在业务低峰期执行,并做好配置与数据的备份。
    持续监控与压测能确保优化效果稳定并随业务增长而迭代。

0