温馨提示×

如何提高Debian Apache响应速度

小樊
34
2025-11-26 05:47:22
栏目: 智能运维

Debian Apache 响应速度优化清单

一 基础与连接优化

  • 启用压缩:开启 mod_deflate,压缩文本、样式、脚本等传输体积。
    sudo a2enmod deflate
    # /etc/apache2/mods-enabled/deflate.conf
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
    </IfModule>
    
  • 启用长连接:复用 TCP 连接,降低握手开销。
    # /etc/apache2/apache2.conf 或 ports.conf 的 <VirtualHost> 内
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 5
    
  • 启用 HTTP/2:多路复用、头部压缩,显著提升并发页面加载。
    sudo a2enmod http2
    # /etc/apache2/sites-enabled/000-default.conf 的 <VirtualHost *:443> 内
    Protocols h2 http/1.1
    
  • 精简模块与日志:禁用不需要的模块(如 mod_autoindex、mod_info 等),减少内存与 CPU;访问日志按需降级为 warn 级别以降低 I/O。
    sudo a2dismod autoindex
    # CustomLog ${APACHE_LOG_DIR}/access.log common
    LogLevel warn
    

以上措施能直接减少传输量、连接开销与无效负载,是最快见效的优化项。

二 MPM 并发与进程模型

  • 选择并优化 MPM:动态站点优先使用 event MPM,静态资源为主可考虑 worker;传统 prefork 在高并发下扩展性较差。
  • 示例 event MPM 参数(请结合内存与压测微调):
    sudo a2enmod mpm_event
    # /etc/apache2/mods-enabled/mpm_event.conf
    <IfModule mpm_event_module>
        StartServers             2
        MinSpareThreads         25
        MaxSpareThreads         75
        ThreadLimit             64
        ThreadsPerChild         25
        MaxRequestWorkers       150
        MaxConnectionsPerChild   0
    </IfModule>
    
  • 若使用 prefork(如必须兼容某些模块),减少进程数、避免内存膨胀:
    sudo a2dismod mpm_event && sudo a2enmod mpm_prefork
    # /etc/apache2/mods-enabled/mpm_prefork.conf
    <IfModule mpm_prefork_module>
        StartServers            5
        MinSpareServers         5
        MaxSpareServers        10
        MaxRequestWorkers      150
        MaxConnectionsPerChild 1000
    </IfModule>
    

MPM 决定了并发模型与资源占用,是吞吐与稳定性的核心杠杆。

三 缓存与静态资源加速

  • 页面与静态资源缓存:启用 mod_cache_diskmod_expires,让浏览器与反向代理高效复用内容。
    sudo a2enmod cache_disk expires
    # /etc/apache2/conf-available/cache_disk.conf
    <IfModule mod_cache_disk.c>
        CacheRoot /var/cache/apache2/mod_cache_disk
        CacheEnable disk /
        CacheDirLevels 2
        CacheDirLength 1
    </IfModule>
    
    # /etc/apache2/mods-enabled/expires.conf
    <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>
    
  • 启用 Brotli 压缩(需安装模块,通常比 Gzip 更高效):
    sudo apt install brotli
    sudo a2enmod brotli
    # /etc/apache2/mods-enabled/brotli.conf
    <IfModule mod_brotli.c>
        AddOutputFilterByType BROTLI text/html text/plain text/xml text/css application/javascript application/json
    </IfModule>
    
  • 使用 CDN:将图片、视频、下载与静态资源分发至边缘节点,缩短用户与资源的物理距离并降低源站压力。

四 启用 TLS 与网络层优化

  • 生成 DH 参数 并启用 OCSP Stapling,减少 TLS 握手延迟与验证开销。
    sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
    # /etc/apache2/sites-enabled/000-default.conf 的 <VirtualHost *:443> 内
    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(启用 HTTP/2 的前提):
    sudo apt install certbot python3-certbot-apache
    sudo certbot --apache -d yourdomain.com
    
  • 系统网络参数优化(/etc/sysctl.conf),提升连接队列与端口复用能力:
    net.ipv4.tcp_tw_reuse = 1
    net.core.somaxconn = 4096
    

TLS 与网络栈优化能显著降低首包时间并提升高并发下的稳定性。

五 应用层与数据库优化

  • PHP 执行加速:启用 OPcache,减少脚本编译开销。
    # /etc/php/*/apache2/php.ini
    zend_extension=opcache.so
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000
    opcache.revalidate_freq=60
    
  • MySQL/MariaDB:合理设置 innodb_buffer_pool_size(如系统内存充裕可设为物理内存的约 50%–70%),并优化慢查询与索引。
    [mysqld]
    innodb_buffer_pool_size = 1G
    
  • 静态资源工程化:图片压缩与格式升级(如 WebP/AVIF)、合并与压缩 CSS/JS、移除未使用依赖,减少请求数与体积。 应用与数据库往往是动态站点的瓶颈,OPcache 与数据库缓冲命中率提升能显著缩短 TTFB 与整体响应时间。

0