温馨提示×

如何利用Apache2配置提升网站可用性

小樊
43
2025-12-03 00:17:55
栏目: 云计算

提升网站可用性的 Apache2 配置实践

一 架构与冗余

  • 前置负载均衡:在 Apache 前部署 HAProxy/Nginx 或直接使用 Apache 的 mod_proxy_balancer 将流量分发到多台后端,避免单点故障并提升并发能力。示例(Apache 内置负载均衡):
    <Proxy balancer://mycluster>
        BalancerMember http://10.0.0.11:80
        BalancerMember http://10.0.0.12:80
    </Proxy>
    ProxyPass / balancer://mycluster
    ProxyPassReverse / balancer://mycluster
    ProxySet lbmethod byrequests
    
    若使用独立负载均衡器,可在多台 Apache 前再放置 HAProxy 做连接复用与健康检查。
  • 主机层高可用:两台或多台 Apache 主机配合 Keepalived + VIP,主机故障时 VIP 自动漂移,对外提供连续服务。示例 Keepalived 健康检查脚本思路:
    #!/usr/bin/env bash
    if systemctl is-active --quiet apache2; then exit 0; else exit 1; fi
    
    以上组合可在实例、进程、连接三个层面消除单点,显著提升整体可用性。

二 运行时稳定性与并发能力

  • 选择并优化 MPM:高并发场景优先 event/worker,在 Ubuntu 22.04 上可按需切换:
    sudo a2dismod mpm_prefork
    sudo a2enmod mpm_event
    sudo systemctl restart apache2
    
  • 调整并发与超时:合理设置 MaxRequestWorkers/ThreadsPerChildTimeoutKeepAlive 等,既避免资源枯竭,又减少长连接占用。
  • 启用压缩与缓存:开启 mod_deflate 减少传输体积;启用 mod_cache/mod_disk_cache 缓存静态资源,降低后端压力与首包时间。
  • 静态资源长期缓存:通过 mod_expires 设置 Cache-Control/Expires,提升浏览器命中率与稳定性。
  • 日志与观测:将 LogLevel 调整为 warn 减少 I/O;启用 mod_statusserver-status 页面做运行时观测(建议仅内网访问)。

三 关键配置示例

  • 推荐的 KeepAlive 与超时(可按业务微调)
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 2
    
    Timeout 30
    
  • 启用压缩(减少带宽波动对时延的影响)
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
    </IfModule>
    
  • 磁盘缓存(示例路径与层级可按磁盘与规模调整)
    <IfModule mod_cache_disk.c>
        CacheEnable disk /
        CacheRoot "/var/cache/apache2"
        CacheDirLevels 2
        CacheDirLength 1
    </IfModule>
    
  • 静态资源过期(提升命中率,降低后端波动传导)
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType image/jpg  "access plus 1 year"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png  "access plus 1 year"
        ExpiresByType text/css  "access plus 1 month"
        ExpiresByType application/javascript "access plus 1 month"
        ExpiresDefault "access plus 2 days"
    </IfModule>
    
  • 运行监控(仅本地访问)
    <Location "/server-status">
        SetHandler server-status
        Require local
    </Location>
    

以上参数能显著降低握手与传输开销、提升缓存命中、减少日志抖动,并在故障时更快收敛。

四 运维与监控

  • 日志轮转与容量控制:使用 logrotate 管理 access/error 日志,避免磁盘被占满导致进程异常或写入失败。
  • 资源与连接上限:提升系统与进程的 文件描述符 限制(如 ulimit -n 65535),并合理设置内核网络参数(如 net.core.somaxconnnet.ipv4.tcp_tw_reuse)以减少连接排队与资源枯竭风险。
  • 持续观测与告警:结合 server-status、进程/连接监控(如 htopsar)与日志分析,建立关键指标(5xx 比例、连接数、响应时延)的阈值告警,提前识别可用性风险。

五 变更与验证流程

  • 灰度与回滚:先在测试环境验证,再分批上线;保留可回滚的上一版配置与虚拟主机;变更窗口避开业务高峰。
  • 配置语法与依赖检查:执行 apache2ctl configtest 确认语法无误;启用必要模块(如 a2enmod ssl cache disk_cache deflate status proxy proxy_balancer)。
  • 优雅重启:使用 systemctl reload apache2,确保长连接不断开、现有请求完成后再切换。
  • 健康检查与演练:对负载均衡与健康检查路径做拨测;定期演练 主备切换后端摘除/恢复,验证故障转移时延与数据一致性。

0