温馨提示×

如何通过Apache配置优化网站响应时间

小樊
39
2025-12-17 00:14:43
栏目: 云计算

Apache配置优化网站响应时间的实用清单

一 核心网络与连接优化

  • 启用持久连接 KeepAlive,减少 TCP 握手与慢启动带来的开销;将 KeepAliveTimeout 设为既能覆盖页面内多资源加载、又不长期占用工作进程的值(如 5–10 秒);将 MaxKeepAliveRequests 设为较大值以减少连接重建(如 100)。示例:
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 5
    
    验证:响应头出现 Connection: keep-alive
  • 合理设置 Timeout(总请求/应答超时)。动态站点建议 5–15 秒;过长会占用进程,过短易中断慢请求。示例:
    Timeout 10
    
  • 启用 HTTP/2 提升多路复用与头部压缩效果(需 TLS)。示例:
    LoadModule http2_module modules/mod_http2.so
    # 在 443 虚拟主机中确保 SSLEngine on
    
    说明:HTTP/2 能显著改善多资源页面的首屏与整体加载速度。

二 选择并优化MPM并发模型

  • 优先选择 event MPM(高并发、低线程阻塞),动态内容为主时结合 worker/event + mod_proxy_fcgi;若使用 PHP-FPM,通常不建议使用 prefork(每个进程单线程,内存占用高、并发受限)。
  • 参考 event MPM 的保守起步参数(按内存与压测逐步上调):
    <IfModule mpm_event_module>
        StartServers             2
        MinSpareThreads         25
        MaxSpareThreads         75
        ThreadLimit             64
        ThreadsPerChild         25
        MaxRequestWorkers       150
        MaxConnectionsPerChild   0
    </IfModule>
    
    调优要点:
    • 目标是在峰值并发下,工作进程/线程总占用内存不超过物理内存的 60%–70%
    • 观察指标:请求排队、CPU 利用率、内存占用、连接数;逐步增大 MaxRequestWorkers/ThreadsPerChild,并相应调整 ServerLimit/ThreadLimit

三 内容传输与缓存策略

  • 启用压缩(mod_deflate)。Apache 2.4 建议配合 mod_filter 使用更稳妥的过滤器方式;同时避免对图片、PDF、已压缩包等再压缩。示例:
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
        # 可选:使用 mod_filter 更灵活(2.4+)
        # SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|gz|bz2)$ no-gzip dont-vary
    </IfModule>
    
  • 设置浏览器缓存(mod_expires),对静态资源设置较长有效期,减少重复请求:
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/css  "access plus 1 month"
        ExpiresByType application/javascript "access plus 1 month"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png  "access plus 1 year"
        ExpiresByType image/gif  "access plus 1 year"
        ExpiresByType text/html  "access plus 1 hour"
    </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
        </IfModule>
    </IfModule>
    
  • 动态内容加速:为 PHP 启用 OPcache(或其他 opcode 缓存),减少编译开销;静态资源建议接入 CDN 进一步缩短用户时延。

四 启用HTTPS与传输层优化

  • 开启 TLS 并优先使用 HTTP/2;配置会话缓存与会话票据复用,降低握手开销:
    <IfModule mod_ssl.c>
        SSLSessionCache        shmcb:/var/run/ssl_scache(512000)
        SSLSessionCacheTimeout 300
    </IfModule>
    
  • 启用 OCSP Stapling 提升证书状态校验效率与首包时间:
    SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
    SSLUseStapling         On
    SSLStaplingCache     "shmcb:/var/run/stapling-cache(150000)"
    
  • 说明:现代浏览器在 TLS + HTTP/2 下通常优于 HTTP/1.1 + KeepAlive,建议全站 HTTPS。

五 监控验证与迭代

  • 配置与变更流程:
    • 备份配置;语法检查:httpd -tapache2ctl configtest;灰度/分步重启;变更后持续观察。
  • 观测与压测:
    • 使用 mod_status 查看 Busy/Idle workers、Scoreboard;用 ab、wrk、k6 做渐进式压测;用 Chrome DevTools、WebPageTest 验证 TTFB、首屏、传输大小HTTP/2、gzip、缓存命中 是否生效。
  • 逐步调参方法:
    • 以“稳定基线→小步上调并发参数→观察排队与错误→回滚或再微调”的闭环方式进行;优先保障 P95/P99 延迟错误率 稳定。

0