优化Apache配置需围绕资源分配、并发处理、缓存机制、模块管理四大核心方向展开,以下是具体步骤:
Apache的MPM(Multi-Processing Module)决定了其处理请求的方式,直接影响并发性能。Ubuntu默认安装worker
或event
模块(比传统的prefork
更高效):
prefork
:适用于需要高稳定性的场景(如运行CGI脚本),每个请求由独立进程处理,内存占用高。worker
/event
:使用多线程处理请求,内存消耗更低,适合高并发动态内容(如PHP+MySQL应用)。# 禁用prefork,启用worker(以worker为例)
sudo a2dismod mpm_prefork
sudo a2enmod mpm_worker
sudo systemctl restart apache2
配置参数示例(/etc/apache2/mods-available/mpm_worker.conf
):
<IfModule mpm_worker_module>
StartServers 2 # 启动时的子进程数
MinSpareThreads 25 # 最小空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadLimit 64 # 线程数上限
ThreadsPerChild 25 # 每个子进程创建的线程数
MaxRequestWorkers 150 # 最大并发请求数(关键参数,需根据内存调整)
MaxConnectionsPerChild 0 # 每个子进程处理的请求数(0表示无限制,建议设为1000-5000防内存泄漏)
</IfModule>
并发连接数的优化需平衡吞吐量与资源占用,核心参数包括:
KeepAlive
:启用持久连接,减少TCP握手开销(但需限制超时时间,避免空闲连接占用内存)。MaxKeepAliveRequests
:每个KeepAlive连接允许的最大请求数(避免单个连接占用过多资源)。KeepAliveTimeout
:KeepAlive连接的超时时间(秒),建议设为5-10秒。/etc/apache2/apache2.conf
):KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
缓存可显著减少服务器负载,提升静态内容(图片、CSS、JS)的响应速度:
mod_cache
+ mod_cache_disk
:将静态内容缓存到磁盘,避免重复读取。mod_expires
:设置静态资源的过期时间,让浏览器缓存内容,减少服务器请求。# 启用缓存模块
sudo a2enmod cache cache_disk expires
sudo systemctl restart apache2
配置示例(/etc/apache2/apache2.conf
):
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheEnable disk /static/ # 缓存/static/目录下的静态内容
CacheRoot /var/cache/apache2/mod_cache_disk # 缓存根目录
CacheDirLevels 2 # 缓存目录层级
CacheDirLength 1 # 目录名长度
CacheDefaultExpire 3600 # 默认缓存过期时间(1小时)
</IfModule>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 1 week" # HTML缓存1周
ExpiresByType text/css "access plus 1 month" # CSS缓存1个月
ExpiresByType application/javascript "access plus 1 month" # JS缓存1个月
</IfModule>
使用mod_deflate
模块对HTML、CSS、JS等文本数据进行Gzip压缩,减少网络传输量(通常可压缩至原大小的30%-70%)。
操作步骤:
# 启用deflate模块
sudo a2enmod deflate
sudo systemctl restart apache2
配置示例(/etc/apache2/apache2.conf
):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
Apache默认加载大量模块(如mod_status
、mod_info
),禁用不需要的模块可减少内存占用和攻击面。
操作步骤:
# 查看已启用的模块
apache2ctl -M
# 禁用不需要的模块(如status)
sudo a2dismod status
# 重启Apache
sudo systemctl restart apache2
过度详细的日志会增加磁盘I/O和CPU负载,建议:
LogLevel
从info
调整为warn
或error
(仅记录错误信息)。logrotate
:自动分割、压缩旧日志,避免日志文件过大。/etc/apache2/apache2.conf
):LogLevel warn # 调整日志级别
# 自定义日志格式(可选)
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog ${APACHE_LOG_DIR}/access.log common
ErrorLog ${APACHE_LOG_DIR}/error.log
MaxRequestWorkers
:根据服务器内存计算(公式:总内存 - 系统预留内存(约1-2GB)
/ 每个Apache进程的内存占用(约10-20MB)
)。例如,4GB内存服务器可设置为150-200。MaxRequestsPerChild
:设置每个子进程处理的请求数(如1000-5000),防止内存泄漏(长期运行的进程可能积累内存碎片)。使用工具监控Apache性能,根据实际情况调整配置:
htop
(查看CPU、内存使用)、apachetop
(查看请求速率、响应时间)。ab
(Apache Benchmark)模拟高并发请求,评估配置效果(示例:ab -n 1000 -c 100 http://yourdomain.com/
)。error.log
(/var/log/apache2/error.log
),排查性能瓶颈(如慢查询、模块冲突)。通过以上步骤,可显著提升Ubuntu上Apache的性能、并发处理能力和稳定性。需根据服务器硬件资源(内存、CPU)和应用类型(静态/动态内容)灵活调整参数。