总体思路
在 CentOS 上,提升网站可承载的并发与有效“流量”(QPS/吞吐)通常从 并发模型、传输效率、缓存策略、连接复用、日志与监控、架构扩展 六个维度入手。下面给出可直接落地的配置与步骤。
一 并发与连接优化
- 选择并启用 MPM Event(高并发首选),若使用 PHP,需配合 PHP-FPM(Event 与线程安全模块不兼容)。检查与切换示例:
- 查看 MPM:httpd -V | grep -i mpm
- 启用 Event(编辑 /etc/httpd/conf.modules.d/00-mpm.conf,确保仅加载 mpm_event,注释 prefork/worker)
- 安装并启用 PHP-FPM:yum install php-fpm -y && systemctl enable --now php-fpm
- 调整 Event 参数(示例为中等规模,按内存与压测微调):
- StartServers 3
- MinSpareThreads 75
- MaxSpareThreads 250
- ThreadsPerChild 25
- MaxRequestWorkers 400(进程数 × 线程数)
- MaxConnectionsPerChild 1000
- ServerLimit 16
- 开启 KeepAlive 复用连接(高并发建议适度提高,低并发可保守):
- KeepAlive On
- KeepAliveTimeout 5–15(秒)
- MaxKeepAliveRequests 100–300
- 说明:压缩会提升 CPU 占用,长连接会占用更多内存;以压测结果为准做权衡。
二 传输与缓存优化
- 启用 Gzip/DEFLATE 压缩,减少传输体积(文本类资源收益最大):
- 模块:LoadModule deflate_module modules/mod_deflate.so
- 配置示例:
- AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json image/svg+xml
- DeflateCompressionLevel 3–6(1–9,越高压缩率越高、CPU越高)
- 设置 浏览器缓存(减少重复请求与回源):
- 模块:LoadModule expires_module modules/mod_expires.so
- 配置示例:
- 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 image/x-icon “access plus 1 year”
- 可选:启用 服务器端缓存(动态内容命中率较高时考虑 mod_cache/mod_cache_disk):
- CacheEnable disk /
- CacheRoot “/var/cache/apache2/mod_cache_disk”
- CacheDirLevels 2
- CacheDirLength 1
- CacheDefaultExpire 3600
- 验证:浏览器开发者工具查看响应头 Content-Encoding: gzip;或在线工具检测压缩与缓存命中。
三 日志、监控与基础安全
- 日志轮转,避免大文件影响 I/O 与性能:
- 使用 rotatelogs:CustomLog “|/usr/sbin/rotatelogs -l /var/log/httpd/access_%Y%m%d%H%M%S.log 86400” combined
- 开启 mod_status 做实时监控(仅内网或受限访问):
- LoadModule status_module modules/mod_status.so
- 在虚拟主机或全局配置中加:
- <Location /server-status>
- SetHandler server-status
- Require local
-
如需内网访问:Require ip 192.168.0.0/16
- 基础安全与信息泄露防护:
- ServerTokens Prod
- ServerSignature Off
- 连接与负载观测:
- ss -s 查看连接状态
- ab 压测:ab -n 10000 -c 1000 http://your-domain/
- 按需启用 mod_rewrite 做防盗链(示例禁止外站盗用图片):
- RewriteEngine On
- RewriteCond %{HTTP_REFERER} !^http://your-domain/ [NC]
- RewriteRule .(gif|jpg|png|swf)$ /error.html [R,NC]
四 架构扩展与流量承载
- 静态资源卸载:将 图片、CSS、JS、视频 交由 Nginx 或 CDN,Apache 专注动态请求,显著降低后端负载与时延。
- 反向代理与负载均衡(多台后端时):
- 启用模块:mod_proxy、mod_proxy_balancer
- 示例:
- <Proxy balancer://mycluster>
- BalancerMember http://10.0.0.11:8080
- BalancerMember http://10.0.0.12:8080
- ProxyPass / balancer://mycluster/
- ProxyPassReverse / balancer://mycluster/
五 快速检查清单与建议值
- 确认 MPM 为 event,PHP 走 PHP-FPM
- KeepAlive:On;KeepAliveTimeout:5–15s;MaxKeepAliveRequests:100–300
- 压缩:启用 mod_deflate;压缩级别 3–6;覆盖 text/html、text/css、application/javascript、application/json、image/svg+xml
- 缓存:启用 mod_expires;长期缓存 图片/字体/图标(1年);CSS/JS(1个月)
- 日志:启用 rotatelogs 按天/小时切割
- 监控:开启 mod_status;用 ab/ss 做压测与连接观测
- 扩展:静态资源上 CDN/Nginx;多机用 mod_proxy_balancer 做负载均衡
- 每次变更先备份配置,执行 configtest 再重启:httpd -t && systemctl restart httpd
以上配置与步骤在 CentOS 7/8/Stream 的 Apache 2.4 上通用;参数需结合实例规格与业务特征压测微调,优先从“并发模型 + 压缩 + 缓存”三板斧入手,再考虑架构扩展。