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