优化Apache2响应速度需从配置调整、缓存优化、压缩技术、内核参数、模块管理、日志控制等多维度入手,以下是具体步骤:
KeepAlive通过复用TCP连接减少“三次握手”的频繁建立与断开,显著提升并发处理能力。在Apache配置文件(/etc/httpd/conf/httpd.conf)中添加以下参数:
KeepAlive On
MaxKeepAliveRequests 100 # 单个连接最大请求数(避免单个连接占用过多资源)
KeepAliveTimeout 5 # 连接保持时间(秒,平衡响应速度与资源占用)
修改后需重启Apache服务使配置生效:systemctl restart httpd。
MPM是Apache处理并发的核心模块,CentOS 7默认使用prefork(适合兼容性场景),若为高并发环境建议切换至event(异步非阻塞,性能更优)。
/etc/httpd/conf.modules.d/00-mpm.conf):<IfModule mpm_prefork_module>
StartServers 5 # 启动时的进程数
MinSpareServers 5 # 最小空闲进程数(避免频繁创建进程)
MaxSpareServers 10 # 最大空闲进程数(避免占用过多内存)
MaxRequestWorkers 150 # 最大并发请求数(根据服务器内存调整,每进程约消耗5-10MB)
MaxConnectionsPerChild 0 # 每个子进程处理的最大请求数(0表示无限制,建议设为1000-5000防内存泄漏)
</IfModule>
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
切换模块后需注释掉原模块的LoadModule指令,并启用新模块。静态文件(CSS、JS、图片)无需动态生成,通过缓存可减少服务器负载与HTTP请求。使用mod_expires模块设置缓存时间(/etc/httpd/conf.d/expires.conf):
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 30 days" # CSS文件缓存30天
ExpiresByType image/jpeg "access plus 1 year" # JPEG图片缓存1年
ExpiresByType image/png "access plus 1 year" # PNG图片缓存1年
ExpiresByType image/gif "access plus 1 year" # GIF图片缓存1年
ExpiresByType application/javascript "access plus 30 days" # JS文件缓存30天
</IfModule>
缓存生效后,浏览器会直接从本地读取静态文件,无需重复请求服务器。
Gzip可将HTML、CSS、JS等文本文件压缩至原大小的30%-70%,显著提升传输速度。使用mod_deflate模块启用压缩(/etc/httpd/conf.d/deflate.conf):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
注意:避免压缩图片、视频等二进制文件(已自带压缩格式),以免增加CPU负担。
调整内核参数可改善TCP连接处理、文件描述符限制等问题,编辑/etc/sysctl.conf文件:
# 开启SYN Cookies防止SYN Flood攻击
net.ipv4.tcp_syncookies = 1
# 允许TIME-WAIT sockets重新用于新连接(减少TIME-WAIT堆积)
net.ipv4.tcp_tw_reuse = 1
# 快速回收TIME-WAIT sockets(适用于高并发短连接场景)
net.ipv4.tcp_tw_recycle = 1
# TIME-WAIT超时时间(秒,默认60,缩短可快速释放资源)
net.ipv4.tcp_fin_timeout = 30
# 最大文件描述符数量(支持更多并发连接)
fs.file-max = 6815744
# 系统级最大连接数(包括所有端口)
net.core.somaxconn = 65535
# 网络设备接收队列长度(避免丢包)
net.core.netdev_max_backlog = 30000
修改后执行sysctl -p使参数生效。
禁用不必要的模块可降低Apache的内存与CPU消耗。通过以下命令查看已加载模块:
httpd -M
注释掉/etc/httpd/conf.modules.d/目录下不需要的模块(如mod_autoindex、mod_ldap等),例如:
# LoadModule autoindex_module modules/mod_autoindex.so
仅保留必需模块(如mod_rewrite、mod_ssl等)。
详细日志会占用大量磁盘IO,可通过以下方式优化:
CustomLog logs/access_log combined # 使用"combined"格式(包含基本请求信息,比"common"格式更简洁)
LogLevel warn # 仅记录警告及以上级别的日志(减少info级别的冗余信息)
logrotate工具定期分割日志文件(默认已配置),避免单个日志文件过大。以上优化步骤需根据服务器实际硬件配置(CPU、内存、硬盘)、业务负载(并发量、静态/动态内容比例)进行调整。优化后建议使用ab(Apache Benchmark)、htop等工具监控性能,确保配置生效且服务器稳定运行。