温馨提示×

Debian上Apache2性能优化技巧

小樊
39
2025-11-16 06:44:00
栏目: 智能运维

Debian 上 Apache2 性能优化实用指南

一 基础准备与模块启用

  • 保持系统与软件为最新,减少漏洞并获取性能修复:sudo apt update && sudo apt upgrade
  • 启用关键性能相关模块:sudo a2enmod deflate expires headers http2 ssl rewrite(按需启用)。
  • 禁用不需要的模块以降低内存与 CPU 开销:apache2ctl -M | grep -v \[a2_\] 查看已启用模块,使用 sudo a2dismod 模块名 禁用无用模块。
  • 使用 sudo apache2ctl -V | grep MPM 查看当前 MPM,高并发优先使用 event(或 worker)。

二 传输层与内容交付优化

  • 启用压缩,减少传输体积:
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css \
            application/javascript application/json application/x-javascript
    </IfModule>
    
  • 设置浏览器缓存策略,命中率更高、回源更少:
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/html       "access plus 1 hour"
        ExpiresByType text/css        "access plus 1 week"
        ExpiresByType application/javascript "access plus 1 week"
        ExpiresByType image/jpeg     "access plus 1 month"
        ExpiresByType image/png      "access plus 1 month"
        ExpiresByType image/gif      "access plus 1 month"
    </IfModule>
    
  • 启用 HTTP/2(需 HTTPS):sudo a2enmod http2,在虚拟主机启用 Protocols h2 http/1.1
  • 可选:启用磁盘缓存(静态资源命中率提升明显):
    <IfModule mod_cache.c>
        <IfModule mod_cache_disk.c>
            CacheRoot /var/cache/apache2/mod_cache_disk
            CacheEnable disk /
            CacheDirLevels 2
            CacheDirLength 1
        </IfModule>
    </IfModule>
    
  • 建议关闭签名与版本信息泄露:ServerSignature OffServerTokens Prod

三 MPM 并发与 KeepAlive 调优

  • 持久连接减少握手开销:
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 5
    Timeout 30
    
  • 选择并调整 MPM(示例为 event,需按内存与并发目标微调):
    # mpm_event.conf
    <IfModule mpm_event_module>
        StartServers             2
        MinSpareThreads         25
        MaxSpareThreads         75
        ThreadLimit             64
        ThreadsPerChild         25
        MaxRequestWorkers       150
        MaxConnectionsPerChild   0
    </IfModule>
    
    估算思路:若单进程/线程常驻内存约为 M MB,则并发上限近似为 MaxRequestWorkers ≤ 可用内存 / M;先保守设置,再结合监控逐步上调。
  • 若使用 prefork(如部分 PHP 场景),关注 MaxRequestWorkers(旧称 MaxClients)与 MaxConnectionsPerChild,避免内存膨胀。

四 启用 HTTPS 与 TLS 优化

  • 生成更强的 DH 参数:sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
  • 启用 OCSP Stapling 与会话缓存,降低握手延迟:
    SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
    SSLUseStapling On
    SSLStaplingCache "shmcb:/var/run/stapling-cache(150000)"
    
    SSLSessionCache "shmcb:/var/run/ssl_scache(512000)"
    SSLSessionCacheTimeout 300
    
  • 获取免费证书并自动配置 HTTPS:sudo apt install certbot python3-certbot-apache,然后 sudo certbot --apache -d yourdomain.com
  • 建议:SSLCompression off,并优先使用 ECDHE 套件与 TLSv1.2/1.3

五 监控 日志 与系统层优化

  • 监控与观测:
    • 模块状态:sudo a2enmod status 并在虚拟主机配置 ExtendedStatus On,访问 /server-status 查看并发、请求耗时等。
    • 进程与连接:htopapachetopnetstat -tnp | grep :80,定位瓶颈与异常连接。
  • 日志优化:降低日志级别与开销,LogLevel warn;按需分离与轮转访问/错误日志,避免磁盘 I/O 成为瓶颈。
  • 系统层优化:
    • 提升文件描述符与连接队列:sudo sysctl -w net.core.somaxconn=4096net.ipv4.tcp_tw_reuse=1
    • 适度增大 TCP 缓冲区:net.core.rmem_maxnet.core.wmem_max
  • 动态内容场景:优先使用 PHP-FPM(与事件/工作线程模型更匹配),减少阻塞与内存占用。
  • 变更流程:每次只调整少量参数,变更后用 ab/wrk 或真实流量压测,观察 CPU、内存、连接数、P95/P99 延迟,再迭代优化。

0