1. 调整MPM(多处理模块)配置
MPM是Apache处理并发请求的核心模块,Debian默认使用mpm_prefork(适合静态内容),但mpm_event(支持HTTP/2、更适合动态内容)或mpm_worker(多进程多线程混合模式)性能更优。需根据硬件配置修改对应参数:
mpm_event示例(适用于大多数场景):<IfModule mpm_event_module>
StartServers 2 # 初始进程数
MinSpareThreads 25 # 最小空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadLimit 64 # 线程数上限
ThreadsPerChild 25 # 每个子进程的线程数
MaxRequestWorkers 150 # 最大并发请求数(关键参数,需根据内存调整)
MaxConnectionsPerChild 0 # 每个子进程处理的请求数(0表示无限制)
</IfModule>
修改后需禁用旧模块(如sudo a2dismod mpm_prefork)并启用新模块(sudo a2enmod mpm_event),再重启Apache。2. 启用压缩(mod_deflate)
通过Gzip压缩文本类内容(HTML、CSS、JS),可减少传输数据量(通常压缩率为60%-80%),显著提升页面加载速度。配置如下:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
需确保mod_deflate模块已启用(sudo a2enmod deflate),重启Apache后生效。
3. 配置缓存(mod_cache+mod_cache_disk/mod_expires)
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheRoot /var/cache/apache2/mod_cache_disk # 缓存目录(需提前创建)
CacheEnable disk /static # 缓存/static路径下的内容
CacheDirLevels 2 # 缓存目录层级
CacheDirLength 1 # 目录名长度
</IfModule>
</IfModule>
mod_expires为静态内容设置过期时间,让浏览器缓存文件:<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
启用模块(sudo a2enmod cache cache_disk expires),重启Apache。4. 启用KeepAlive
允许客户端在一个TCP连接上发送多个请求,减少连接建立(三次握手)和关闭(四次挥手)的开销。配置如下:
KeepAlive On # 启用KeepAlive
MaxKeepAliveRequests 100 # 单个连接最大请求数(避免单个连接占用过久)
KeepAliveTimeout 5 # 连接保持时间(秒,建议5-10秒)
需平衡连接复用和资源占用,避免设置过大导致服务器资源耗尽。
5. 禁用不必要的模块
Apache默认加载大量模块(如authn_file、autoindex),禁用未使用的模块可减少内存消耗。操作步骤:
cd /etc/apache2/mods-enabled
sudo mv *.load *.load.bak # 备份所有.load文件
sudo mv *.conf *.conf.bak # 备份所有.conf文件
然后根据需要启用必要模块(如sudo a2enmod ssl deflate cache),重启Apache。
6. 使用PHP-FPM替代mod_php
若网站使用PHP,mod_php会将PHP脚本嵌入Apache进程,消耗大量内存。改用PHP-FPM(FastCGI进程管理器)可显著提升PHP处理性能:
sudo apt install php-fpm # 安装PHP-FPM
sudo a2dismod php7.x # 禁用mod_php(x为版本号)
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php-fpm # 启用PHP-FPM配置
修改Apache虚拟主机配置,添加:
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.x-fpm.sock|fcgi://localhost"
</FilesMatch>
重启Apache和PHP-FPM(sudo systemctl restart apache2 php7.x-fpm)。
7. 优化操作系统设置
/etc/security/limits.conf,添加:* soft nofile 65536
* hard nofile 65536
提高Apache进程能打开的文件数(避免“Too many open files”错误)。/etc/sysctl.conf,添加:net.core.somaxconn = 65535 # 监听队列最大长度
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列大小
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT连接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT超时时间(秒)
运行sudo sysctl -p使更改生效。8. 监控与持续调优
使用工具监控服务器性能,针对性调整配置:
htop(查看CPU、内存使用)、netstat -tulnp(查看网络连接)、apachetop(查看Apache请求速率)。ab(ApacheBench)或siege模拟高并发请求,评估优化效果(如ab -n 1000 -c 100 http://yourdomain.com/)。access.log和error.log定位性能瓶颈(如慢请求、错误请求)。