温馨提示×

Apache2 Ubuntu版如何优化

小樊
33
2025-12-15 01:44:40
栏目: 智能运维

Apache2 Ubuntu 版优化实战指南

一 基线检查与模块精简

  • 保持系统与软件为最新:执行sudo apt update && sudo apt full-upgrade,获取性能修复与安全补丁。
  • 精简加载模块:仅启用必需模块,减少攻击面与内存占用。示例:禁用目录浏览模块sudo a2dismod autoindex;按需启用a2enmod ssl rewrite deflate expires cache cache_disk headers
  • 配置结构要点:全局配置在**/etc/apache2/apache2.conf**,可用站点在**/etc/apache2/sites-available/,启用后软链至/etc/apache2/sites-enabled/;端口在/etc/apache2/ports.conf**。每次变更后用apache2ctl configtest校验,再systemctl reload apache2生效。

二 连接与网络参数

  • 启用持久连接:在全局或虚拟主机中设置KeepAlive On,典型值MaxKeepAliveRequests 100KeepAliveTimeout 2–5(高并发建议靠近下限以减少占用)。
  • 合理超时:将Timeout设为5–15 秒(静态小资源可更低,避免长耗时后端拖累)。
  • 减少域名解析开销:关闭HostnameLookups Off
  • 启用压缩与缓存控制:启用mod_deflate压缩文本类资源;启用mod_expires设置过期头,示例:
    • 压缩:AddOutputFilterByType DEFLATE text/html text/css application/javascript
    • 过期:ExpiresActive On;ExpiresByType image/jpg “access plus 1 month”;ExpiresByType text/css “access plus 1 week”

三 选择并调优 MPM(多处理模块)

  • 选择与切换:高并发/长连接场景优先MPM Event(或Worker);若使用mod_php通常被迫用Prefork。切换示例:
    • 启用 Event:sudo a2dismod mpm_prefork && sudo a2enmod mpm_event && sudo systemctl restart apache2
  • 典型参数建议(需结合内存与压测微调):
    • Event(示例起点):StartServers 4;MinSpareThreads 25;MaxSpareThreads 75;ThreadsPerChild 25;MaxRequestWorkers 150;MaxConnectionsPerChild 1000
    • Prefork(示例起点):StartServers 5;MinSpareServers 5;MaxSpareServers 10;MaxRequestWorkers 150;MaxConnectionsPerChild 4000
  • 计算 MaxRequestWorkers 的简易方法:
    • 估算每个 Apache 进程/线程的常驻内存(RSS)为M_MB;可用内存为Free_MB
    • 若为 Event/Worker:MaxRequestWorkers ≈ Free_MB / M_MB(再预留 20–30% 给系统与其他服务);
    • 若为 Prefork:MaxRequestWorkers 同样按上式估算,但注意每个进程通常更“重”。
  • 动态语言运行时建议:PHP 尽量使用PHP-FPM(与 Event/Worker 配合),可显著降低每个进程内存占用,提升并发承载。

四 缓存与静态资源策略

  • 页面与静态资源缓存:启用mod_cachemod_cache_disk,示例:
    • CacheRoot “/var/cache/apache2/mod_cache_disk”;CacheEnable disk /;CacheDirLevels 2;CacheDirLength 1;CacheIgnoreHeaders Set-Cookie
  • 浏览器缓存:通过mod_expires设置资源过期时间,减少重复请求与回源。
  • 静态资源服务优化:对**/static/ /assets/等路径使用独立 VirtualHost 或 Location,尽量由CDN承载;或在 Apache 中关闭.htaccess**(AllowOverride None)以避免目录级配置带来的开销。

五 监控 压测与安全加固

  • 监控与状态页:启用mod_statusExtendedStatus On,通过**/server-status查看总访问、工作者占用、排队等;结合htop、vmstat、netstat**观察 CPU、内存、连接数。
  • 压测与迭代:使用ab/jmeter在测试环境逐步加压,观察错误率、P95/P99 延迟与内存变化,按结果回调 MPM 与 KeepAlive 等参数。
  • 日志与轮转:保持Combined日志格式,使用logrotate按日/大小切分,避免磁盘被撑满。
  • 安全加固要点:关闭版本暴露(ServerTokens ProdServerSignature Off);仅开放必要端口(如80/443);限制管理路径访问;定期更新系统与模块。

0