温馨提示×

怎样优化Apache配置提高访问量

小樊
36
2025-12-14 19:23:34
栏目: 编程语言

优化 Apache 以提升访问量与并发能力

一 核心思路与前置检查

  • 明确瓶颈:是CPU、内存、磁盘 I/O还是网络带宽,不同瓶颈的优化手段不同。
  • 选择合适的 MPM(多路处理模块):高并发优先使用event,传统应用或依赖非线程安全模块时使用prefork。可用命令查看当前 MPM:httpd -l
  • 基线压测与监控:用 ab/siege 做基线压测,结合 top、netstat、tail -f error_log 观察错误与连接状态,按结果迭代参数。

二 调整 MPM 并发参数

  • 通用原则:按“内存/单进程占用 × 最大进程/线程数 ≤ 物理内存”估算,并预留内存给系统与其他服务。
  • 示例一(Linux,mpm_event,高并发推荐):
<IfModule mpm_event_module>
    StartServers             2
    MinSpareThreads         25
    MaxSpareThreads        75
    ThreadLimit             64
    ThreadsPerChild         25
    MaxRequestWorkers     1000
    MaxConnectionsPerChild 1000
</IfModule>
  • 示例二(Linux,mpm_prefork,兼容旧模块/PHP):
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit         256
    MaxRequestWorkers   150   # 依据内存与单进程占用调整
    MaxConnectionsPerChild 1000
</IfModule>
  • 生效与验证:修改后重启服务(如 systemctl restart httpd/apache2),用 ab -n 10000 -c 1000 http://你的站点/ 验证,并观察 error_log 与连接数变化。

三 连接、超时与压缩缓存

  • 长连接与超时(减少握手/挥手与排队):
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Timeout 30
  • 压缩输出(减少带宽、提升首包时间):
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
  • 浏览器缓存(降低重复请求):
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
</IfModule>
  • 服务器端缓存(可选,减轻后端压力):
# Ubuntu/Debian
sudo a2enmod cache
sudo a2enmod cache_disk
# CentOS/RHEL
sudo yum install 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
  </IfModule>
</IfModule>
  • 说明:压缩会增加CPU开销;缓存需结合Cache-Control/ETag与业务更新策略使用。

四 操作系统与网络栈优化

  • 文件描述符限制(允许更多并发连接):
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
  • TCP 参数(加快回收与接受新连接):
# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 应用
sudo sysctl -p
  • 生效方式:调整后在当前会话重新登录或重启相关服务。

五 扩展与架构优化

  • 反向代理/负载均衡(多台 Apache 或与其他服务组合):
<Proxy balancer://mycluster>
    BalancerMember http://node-a:8080
    BalancerMember http://node-b:8080
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
  • 前端加速与缓存:在 Apache 前放置 Nginx/HAProxy/Varnish 做静态资源服务与反向代理缓存,可显著提升并发与命中率。
  • 安全与噪声降低:隐藏版本信息(ServerTokens ProdServerSignature Off),启用防盗链,减少无效流量与攻击面。

0