优化Apache配置提升网站速度的关键方法
KeepAlive通过复用TCP连接减少重复握手开销,显著提升并发请求处理效率。需在Apache配置文件(如httpd.conf或apache2.conf)中添加以下指令:
KeepAlive On(启用长连接)
MaxKeepAliveRequests 150(单个连接最大请求数,避免单个连接占用过久)
KeepAliveTimeout 5(连接超时时间,单位:秒,过短会导致频繁重建连接,过长则浪费资源)。
需平衡连接复用与资源占用,避免过高设置导致服务器负载激增。
MPM是Apache的核心性能引擎,需根据服务器硬件(CPU核心数、内存)和负载类型(CPU密集型/IO密集型)选择合适模式:
<IfModule mpm_event_module>StartServers 3(初始子进程数)MinSpareThreads 25(最小空闲线程数)MaxSpareThreads 75(最大空闲线程数)ThreadsPerChild 25(每个子进程的线程数)MaxRequestWorkers 400(最大并发请求数,≈(可用内存)/(单进程内存占用))MaxConnectionsPerChild 10000(单进程处理请求数,避免内存泄漏)</IfModule><IfModule mpm_prefork_module>StartServers 5MinSpareServers 5MaxSpareServers 10MaxRequestWorkers 150MaxConnectionsPerChild 10000</IfModule>httpd -V | grep -i mpm确认当前模式,避免多模式冲突。通过缓存静态资源(图片、CSS、JS)减少重复请求,降低服务器负载。需启用mod_expires和mod_headers模块,配置示例如下:
<IfModule mod_expires.c>
ExpiresActive On(启用缓存)
ExpiresByType image/jpeg "access plus 1 year"(图片缓存1年)
ExpiresByType text/css "access plus 1 month"(CSS缓存1个月)
ExpiresByType application/javascript "access plus 1 month"(JS缓存1个月)
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(ico|jpe?g|png|webp|css|js)$">
Header set Cache-Control "public, max-age=31536000, immutable"(immutable属性告知浏览器永不重新验证,跳过304检查)
</FilesMatch>
</IfModule>
需注意:动态资源(如API响应)不应缓存或设置极短过期时间(如access plus 0 seconds)。
Gzip压缩可减少传输数据量(通常20%-80%),提升页面加载速度。需启用mod_deflate模块,配置示例如下:
<IfModule mod_deflate.c>
DeflateCompressionLevel 6(压缩级别,1-9,6为性能与压缩比的最佳平衡)
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json(需压缩的MIME类型)
BrowserMatch ^Mozilla/4 gzip-only-text/html(兼容旧版IE)
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE\s(7|8) !no-gzip !gzip-only-text/html
</IfModule>
需排除已压缩的文件(如JPEG、PNG),避免重复压缩增加CPU负担。
通过磁盘缓存静态内容(如HTML、CSS),减少对后端服务器的请求。需启用mod_cache和mod_cache_disk模块,配置示例如下:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheEnable disk /(启用磁盘缓存)
CacheRoot "/var/cache/apache2/mod_cache_disk"(缓存根目录,需提前创建并授权)
CacheDirLevels 2(缓存目录层级)
CacheDirLength 1(目录名长度)
CacheDefaultExpire 3600(默认过期时间,单位:秒)
</IfModule>
</IfModule>
可结合mod_expires设置更精准的缓存过期策略,提升缓存命中率。
HTTP/2相较于HTTP/1.1支持多路复用(一个连接并行处理多个请求)、头部压缩等功能,显著提升页面加载速度。需启用mod_http2模块,配置示例如下:
LoadModule http2_module modules/mod_http2.so
Protocols h2 http/1.1(优先使用HTTP/2,兼容HTTP/1.1)
需确保服务器证书有效(HTTPS是HTTP/2的前提),并通过浏览器开发者工具确认协议版本。
过度日志记录会增加磁盘I/O和CPU开销,需调整日志级别和格式:
LogLevel设置为warn或error(默认为info),减少不必要的日志输出。Common格式替代Combined格式(去掉Referer、User-Agent等字段),示例如下:CustomLog logs/access_log commonlogrotate工具定期归档日志,避免日志文件过大。Apache默认加载大量模块,禁用未使用的模块可减少内存占用和潜在安全风险。通过httpd -M或apache2ctl -M查看已加载模块,禁用不需要的模块(如mod_autoindex、mod_status):
sudo a2dismod autoindex status(Debian/Ubuntu)
sudo yum remove mod_autoindex mod_status(CentOS/RHEL)
重启Apache后生效。