Apache2优化配置提升性能指南
MPM是Apache2处理并发请求的核心组件,不同模块适用于不同场景,选对模块是性能优化的基础:
/etc/apache2/mods-enabled/mpm_prefork.conf):<IfModule mpm_prefork_module>
StartServers 5 # 启动时的进程数
MinSpareServers 5 # 最小空闲进程数
MaxSpareServers 10 # 最大空闲进程数
MaxRequestWorkers 150 # 最大并发请求数(根据内存调整,每进程约消耗50-100MB)
MaxConnectionsPerChild 0 # 每个子进程处理的请求数(0表示无限制,建议设为1000-5000防内存泄漏)
</IfModule>
/etc/apache2/mods-enabled/mpm_worker.conf):<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25 # 每个子进程的线程数
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
/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>
注意:切换MPM前需禁用旧模块(
sudo a2dismod mpm_prefork),启用新模块(sudo a2enmod mpm_event),并重启Apache(sudo systemctl restart apache2)。
KeepAlive允许客户端与服务器保持连接,减少TCP握手开销,但过度使用会增加服务器负担,需平衡性能与资源占用:
KeepAlive On # 启用KeepAlive
MaxKeepAliveRequests 100 # 单个连接最大请求数(避免单个连接占用过久)
KeepAliveTimeout 5 # 连接保持时间(秒,建议5-10秒,过长会导致端口耗尽)
提示:静态资源较多的网站可将
KeepAliveTimeout设为更短(如3秒),动态资源可适当延长。
使用mod_deflate模块压缩HTML、CSS、JavaScript等文本资源,可减少约50%-70%的传输数据量,显著提升页面加载速度:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
# 排除特定浏览器(如旧版IE)的兼容性问题
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
通过mod_expires和mod_cache模块设置静态资源(图片、CSS、JS)的缓存时间,减少客户端重复请求,降低服务器负载:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year" # JPG图片缓存1年
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 30 days" # CSS缓存30天
ExpiresByType application/javascript "access plus 30 days" # JS缓存30天
</IfModule>
<IfModule mod_cache.c>
CacheEnable disk /static # 缓存/static目录下的静态资源
CacheRoot "/var/cache/apache2" # 缓存根目录(需手动创建:sudo mkdir -p /var/cache/apache2)
CacheDirLevels 2 # 缓存目录层级(优化IO性能)
CacheDirLength 1 # 目录名长度(1-2位,平衡性能与目录数量)
</IfModule>
过度详细的日志会占用磁盘IO和CPU资源,建议降低日志级别并简化格式:
LogLevel warn # 仅记录警告及以上级别的日志(生产环境推荐)
CustomLog /var/log/apache2/access.log combined # 使用简洁的combined格式(替代common)
ErrorLog /var/log/apache2/error.log
Apache默认加载大量模块,禁用未使用的模块可减少内存占用和潜在攻击面:
# 查看已启用的模块
apache2ctl -M
# 禁用不需要的模块(如cgi、status,若不需要)
sudo a2dismod cgi
sudo a2dismod status
# 重启Apache使更改生效
sudo systemctl restart apache2
调整Linux内核参数以提升网络和文件系统性能,主要修改/etc/sysctl.conf文件:
# 允许重用TIME_WAIT状态的端口(减少端口耗尽)
net.ipv4.tcp_tw_reuse = 1
# 增加TCP连接队列长度(避免连接被拒绝)
net.core.somaxconn = 4096
# 提高文件描述符限制(应对高并发)
fs.file-max = 65536
修改后执行sudo sysctl -p使参数生效。
通过mod_proxy和mod_cache模块缓存动态内容(如PHP、数据库查询结果),减少后端服务器的压力:
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass /dynamic/ http://backend_server/dynamic/
ProxyPassReverse /dynamic/ http://backend_server/dynamic/
</IfModule>
<IfModule mod_cache.c>
CacheEnable disk /dynamic/
CacheRoot "/var/cache/apache2"
CacheDirLevels 2
CacheDirLength 1
</IfModule>
mod_status模块查看Apache性能指标(如请求数、CPU占用、连接状态),帮助定位瓶颈:LoadModule status_module modules/mod_status.so
ExtendedStatus On
<Location "/server-status">
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost 127.0.0.1 [::1]
</Location>
访问http://服务器IP/server-status查看状态(需替换为实际IP)。top、htop、netstat、ss等工具监控CPU、内存、网络连接状态;使用ab(Apache Benchmark)或wrk进行压力测试,评估优化效果。mod_proxy_balancer模块将请求分发到多台后端服务器,提升并发处理能力。