通过 Apache 配置提升 Ubuntu 网站稳定性
一 基础稳固与连接治理
- 保持系统与组件为最新版本,及时获取安全补丁与修复:执行 sudo apt update && sudo apt full-upgrade -y。
- 启用持久连接并控制其生命周期:KeepAlive On;MaxKeepAliveRequests 建议 100;KeepAliveTimeout 建议 2–5 秒,在高并发下取 2 秒更稳。
- 合理设置全局超时:Timeout 建议 30 秒,避免慢客户端长时间占用工作进程。
- 关闭 DNS 反向查询:HostnameLookups Off,减少阻塞与额外负载。
- 精简模块与访问面:禁用不需要的模块(如 mod_cgi、mod_userdir),降低攻击面与资源占用。
- 启用压缩与缓存:启用 mod_deflate 对文本类资源压缩;启用 mod_cache/mod_disk_cache 做页面与静态资源缓存,减轻后端压力。
二 选择并调优 MPM 并发模型
- 选择原则:
- event:基于事件驱动,适合大量并发与长连接(HTTP KeepAlive)场景,资源利用更高效。
- worker:多线程模型,较 prefork 更高效,但需应用线程安全。
- prefork:多进程、非线程,隔离性好、兼容老旧模块(如某些 PHP SAPI),稳定性直观但内存占用更高。
- 切换示例(Ubuntu 常见路径):sudo a2dismod mpm_prefork && sudo a2enmod mpm_event && sudo systemctl restart apache2。
- 并发参数建议(需结合内存与压测微调):
- event/worker(示例起点):StartServers 2;MinSpareThreads 25;MaxSpareThreads 75;ThreadLimit 64;ThreadsPerChild 25;MaxRequestWorkers 150;MaxConnectionsPerChild 0(0 表示不限制,可按需设置)。
- prefork(示例起点):StartServers 5;MinSpareServers 5;MaxSpareServers 10;MaxRequestWorkers 150;MaxConnectionsPerChild 0。
- 计算 MaxRequestWorkers 的保守方法:MaxRequestWorkers ≤ 可用内存 / 单进程/线程平均内存占用。先设定保守值,再用压测逐步上调。
三 超时压缩缓存与会话治理
- 压缩传输:启用 mod_deflate,压缩 text/html、text/css、application/javascript 等,减少带宽占用与排队。
- 页面与静态资源缓存:启用 mod_cache/mod_disk_cache,设置 CacheEnable disk /、CacheRoot、CacheDirLevels、CacheDirLength,提升命中率与响应速度。
- 减少日志抖动:将 LogLevel 调整为 warn,仅记录重要事件,降低 I/O 压力。
- 连接与头部治理:保持 HostnameLookups Off;按需设置 ServerTokens Prod、ServerSignature Off,减少信息暴露与潜在攻击面。
四 安全加固与访问控制
- 防火墙放行:使用 UFW 仅开放 80/443 端口,减少攻击面。
- 启用 HTTPS:配置 SSL/TLS 证书,强制或优先使用 HTTPS,保护数据传输安全。
- 访问控制:在 Directory/Location 中使用 Require 指令进行来源限制与权限最小化。
- 抗 DoS 基础:启用 mod_evasive 进行请求频率与异常行为检测与阻断。
- 状态页仅本地访问:启用 mod_status 的 ExtendedStatus,Location /server-status 仅允许 127.0.0.1 访问,避免信息泄露。
五 监控维护与扩展架构
- 实时监控:使用 top/htop、sar 观察 CPU/内存/负载;启用 Apache server-status 页面查看当前连接、工作进程等关键指标。
- 日志与轮转:定期审查 error.log 与 access.log,使用 logrotate 自动轮转与压缩,避免磁盘被日志撑满。
- 备份与变更管理:在调整前备份配置与数据,变更后灰度观察,确保可快速回滚。
- 扩展架构:当单机已达瓶颈,使用 HAProxy/Nginx 作为反向代理/负载均衡,将流量分发到多台 Apache 后端,提高可用性与横向扩展能力。