温馨提示×

如何利用Apache配置优化网站速度

小樊
40
2025-12-08 20:54:04
栏目: 云计算

Apache配置优化网站速度的可落地方案

一 核心网络与协议优化

  • 启用压缩:使用 mod_deflate 对文本资源进行压缩,显著降低传输体积。
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
        # 可选:对体积很小的资源不压缩,减少CPU开销
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|gz|bz2|pdf)$ no-gzip dont-vary
    </IfModule>
    
  • 启用持久连接:复用 TCP 连接,减少握手开销。
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 5
    
  • 启用 HTTP/2:多路复用、头部压缩,提升并发与首包速度(需 TLS)。
    LoadModule http2_module modules/mod_http2.so
    # 在443虚拟主机中确保 SSLEngine on 后启用 H2
    
  • 启用 SSL/TLS:现代浏览器在 HTTPS 下才能使用 HTTP/2,同时提升安全与性能表现。
    LoadModule ssl_module modules/mod_ssl.so
    Listen 443
    <VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /path/to/cert.crt
        SSLCertificateKeyFile /path/to/private.key
        SSLCertificateChainFile /path/to/chain.pem
    </VirtualHost>
    
  • 使用 CDN:将静态资源分发至全球边缘节点,缩短用户与资源的网络距离。

二 缓存策略

  • 浏览器缓存(强推荐):通过 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>
    
  • 精细控制缓存头:对特定路径设置 Cache-Control
    <IfModule mod_headers.c>
        <Location "/static">
            Header set Cache-Control "max-age=31536000, public"
        </Location>
    </IfModule>
    
  • 反向代理/网关缓存(可选):使用 mod_cache + mod_cache_disk 缓存后端响应,减轻源站压力。
    <IfModule mod_cache.c>
        <IfModule mod_cache_disk.c>
            CacheEnable disk /
            CacheRoot "/var/cache/apache2/mod_cache_disk"
            CacheDirLevels 2
            CacheDirLength 1
            CacheDefaultExpire 3600
            CacheIgnoreHeaders Set-Cookie
        </IfModule>
    </IfModule>
    
  • 静态文件句柄缓存(可选):对极少变更的静态文件使用 mod_file_cache 提升文件系统访问效率。
    LoadModule file_cache_module modules/mod_file_cache.so
    CacheFile /var/www/html/index.html
    
  • 建议:静态资源设置较长缓存,并在发布时通过文件名加 hash 解决更新问题。

三 MPM并发与进程模型调优

  • 选择高效 MPM:在支持并发的场景优先使用 eventworker;若使用 PHP-FPM 且需保持兼容性,prefork 仍是稳妥选项。
  • 典型参数示例(需结合内存与压测微调):
    • prefork(以 CentOS 7 常见默认为例)
      <IfModule prefork.c>
          StartServers        5
          MinSpareServers     5
          MaxSpareServers    10
          MaxRequestWorkers 150
          MaxConnectionsPerChild 0
      </IfModule>
      
    • worker
      <IfModule mpm_worker_module>
          StartServers         5
          MinSpareThreads     5
          MaxSpareThreads    10
          MaxRequestWorkers 250
          MaxConnectionsPerChild 0
      </IfModule>
      
  • 调整思路:在内存与 CPU 允许的前提下,提高并发处理能力;同时关注 MaxRequestWorkers/ServerLimit 与后端(如 PHP-FPM、数据库)承载能力,避免“放大”瓶颈。

四 日志、模块与系统层面优化

  • 精简日志:降低日志级别与写入频率,减少磁盘 I/O。
    LogLevel warn
    CustomLog logs/access_log common
    
  • 禁用不必要模块:减少内存占用与攻击面(如目录浏览)。
    # LoadModule autoindex_module modules/mod_autoindex.so
    # LoadModule dir_module modules/mod_dir.so
    
  • 静态资源交付优化:启用 sendfile 零拷贝(确保操作系统与文件系统支持),减少用户态/内核态数据拷贝。
  • 监控与压测:使用 ab(Apache Bench)WebPageTestmod_status 观察并发、耗时与命中率,持续迭代参数。
    ab -n 1000 -c 100 https://your-site.com/
    
  • 架构级加速:在源站前部署 Varnish/Nginx 作为反向代理缓存,或与 CDN 协同,进一步降低源站压力与网络时延。

五 快速检查清单与注意事项

  • 确认模块加载:使用 apachectl -M | grep -E 'deflate|expires|headers|http2|ssl|cache|cache_disk',缺失则启用对应模块。
  • 配置生效:修改后先 apachectl configtest 校验,再 systemctl restart httpd(或 apache2)滚动重启。
  • 避免常见误区:
    • 已压缩资源(如 JPEG/PNG/GZIP/PDF)不必再压缩,使用 no-gzip dont-vary 排除。
    • KeepAliveTimeout 会占用连接槽位,短 Timeout 可能频繁建连,需结合 RTT 与并发实测。
    • 缓存策略需配合“文件名哈希/版本号”,避免用户端长期命中过期内容。
  • 安全与合规:启用 TLS 时正确配置证书链;对外服务仅开放 80/443,限制管理接口与目录浏览。

0