温馨提示×

Apache2中如何优化网站速度

小樊
42
2025-12-24 15:59:05
栏目: 云计算

Apache2网站速度优化实操指南

一 核心网络与连接优化

  • 启用并优化持久连接:减少 TCP/SSL 握手与慢启动带来的开销。建议值:KeepAlive OnMaxKeepAliveRequests 100KeepAliveTimeout 2–5 秒(高并发可适当降低超时)。
  • 启用 HTTP/2(需 TLS):多路复用降低队头阻塞,提升并发与首包时间。
  • 减少 DNS 与主机名反查:设置 HostnameLookups Off,避免每个请求触发 DNS 查询。
  • 静态资源传输优化:启用 sendfile(若系统支持),减少用户态/内核态拷贝,提高静态文件吞吐。
  • 连接与协议栈微调(可选):结合业务峰值与内核参数(如 net.ipv4.tcp_fin_timeoutnet.ipv4.tcp_max_syn_backlog)进行系统层面优化。

二 选择并调优 MPM 多处理模块

  • 优先选择 MPM Event(或 Worker)以获得更高并发与更低内存开销;Prefork 适合传统模块或需避免线程的 PHP 场景。
  • Ubuntu/Debian 切换示例:
    • 禁用 Prefork:sudo a2dismod mpm_prefork
    • 启用 Event:sudo a2enmod mpm_event
    • 重启:sudo systemctl restart apache2
  • CentOS/RHEL 切换示例:编辑 /etc/httpd/conf.modules.d/00-mpm.conf,注释 Prefork、启用 Event/Worker 并重启 httpd
  • 参考参数(需结合 CPU/内存/并发 实测微调):
    • Event 示例:
      • StartServers 4
      • MinSpareThreads 25MaxSpareThreads 75
      • ThreadsPerChild 25
      • MaxRequestWorkers 150(并发上限,受内存约束)
      • MaxConnectionsPerChild 1000(避免长时运行导致的内存碎片/泄漏累积)
  • Prefork 场景提示:若必须使用 Prefork,建议 KeepAlive 关闭或 KeepAliveTimeout 更短(如 2–5 秒),避免为每个连接长期占用进程。

三 启用压缩与静态资源缓存

  • 启用 mod_deflate 压缩(推荐):减少传输体积,典型类型包含 text/html、text/css、application/javascript、application/json、image/svg+xml
    • 示例:
      • sudo a2enmod deflate(Ubuntu/Debian)
      • 配置:
        <IfModule mod_deflate.c>
          AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css \
            application/javascript application/x-javascript application/json image/svg+xml
          DeflateCompressionLevel 6
          SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|gz|bz2)$ no-gzip dont-vary
        </IfModule>
        
    • 验证:响应头出现 Content-Encoding: gzip/deflate
  • 客户端与代理缓存(mod_expires):为静态资源设置长期 Expires/Cache-Control,降低重复请求。
    • 示例:
      <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/css "access plus 1 year"
        ExpiresByType application/javascript "access plus 1 year"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png "access plus 1 year"
        ExpiresByType image/gif "access plus 1 year"
        ExpiresDefault "access plus 60 seconds"
      </IfModule>
      
  • 反向代理/网关缓存(可选,mod_cache + mod_cache_disk):缓存后端动态内容或整页,显著降低后端压力。
    • 示例:
      <IfModule mod_cache.c>
        <IfModule mod_cache_disk.c>
          CacheRoot "/var/cache/apache2/mod_cache_disk"
          CacheEnable disk /
          CacheDirLevels 2
          CacheDirLength 1
          CacheIgnoreHeaders Set-Cookie
          CacheIgnoreNoLastMod On
          CacheDefaultExpire 3600
        </IfModule>
      </IfModule>
      
  • 验证:响应头出现 Cache-Control / Expires;命中缓存时可见 Age 等字段。

四 静态资源交付与内容优化

  • 使用 CDN 分发静态资源(JS/CSS/图片/字体),缩短用户与资源的网络距离,降低源站带宽与负载。
  • 启用 SSL 会话复用 与合理配置加密套件,减少 TLS 握手开销(与 HTTP/2 配合效果更佳)。
  • 减少 .htaccess 开销:在 内将 AllowOverride None,将 Rewrite 等规则写入主配置,避免每个请求目录遍历与解析。
  • 精简与合并资源、使用现代格式(如 WebP/AVIF)、启用图片懒加载与字体子集化,进一步缩短页面渲染时间。

五 变更验证与运维建议

  • 配置语法检查与平滑重载:sudo apachectl configtestsudo systemctl reload apache2(或 graceful)。
  • 压测与观测:使用 ab/wrk/siege 进行基准测试,结合 mod_statuserror/access 日志观察并发、耗时与错误率。
  • 日志与磁盘:控制日志级别与轮转(如 logrotate),避免磁盘占满影响性能;必要时将日志与数据盘分离。
  • 逐步调优与回滚预案:一次只变更一个参数,记录基线指标与变更效果,异常及时回滚。

0