温馨提示×

如何通过Apache配置提高CentOS网站速度

小樊
44
2025-11-01 14:38:03
栏目: 云计算

1. 启用KeepAlive减少连接开销
KeepAlive允许客户端通过单个TCP连接发送多个HTTP请求,避免频繁建立/关闭连接的开销。在Apache配置文件(/etc/httpd/conf/httpd.conf)中添加以下指令:

KeepAlive On
MaxKeepAliveRequests 100  # 单个连接允许的最大请求数(避免单个连接占用过多资源)
KeepAliveTimeout 5        # 等待下一个请求的超时时间(秒,过短会导致频繁重建连接)

重启Apache服务使配置生效:sudo systemctl restart httpd

2. 调整MPM(多处理模块)提升并发能力
CentOS 7及以上版本的Apache默认使用prefork MPM(多进程模型),适合兼容性场景但并发性能有限;若网站流量较大,建议切换至event MPM(事件驱动模型,支持多线程)。编辑MPM配置文件(/etc/httpd/conf.modules.d/00-mpm.conf),禁用prefork并启用event

# 注释掉prefork配置
# <IfModule mpm_prefork_module>
#     StartServers          5
#     MinSpareServers       5
#     MaxSpareServers      10
#     MaxRequestWorkers   150
#     MaxConnectionsPerChild 0
# </IfModule>

# 启用event MPM(适合高并发)
<IfModule mpm_event_module>
    StartServers          2       # 启动时的进程数
    MinSpareThreads      25       # 最小空闲线程数
    MaxSpareThreads      75       # 最大空闲线程数
    ThreadLimit          64       # 线程数上限
    ThreadsPerChild      25       # 每个子进程创建的线程数
    MaxRequestWorkers   150       # 最大并发请求数(根据服务器内存调整,如1GB内存建议100-150MaxConnectionsPerChild 0    # 每个子进程处理的请求数(0表示无限制)
</IfModule>

注意MaxRequestWorkers需根据服务器内存计算(如1GB内存约支持100-150个并发,公式:可用内存(MB)/每个进程内存占用(MB),可通过top命令查看Apache进程内存占用)。

3. 配置静态文件缓存减轻服务器负载
通过mod_expires模块为静态资源(CSS、JS、图片等)设置浏览器缓存,减少重复请求。在配置文件中添加:

<IfModule mod_expires.c>
    ExpiresActive On              # 启用缓存
    ExpiresByType text/css "access plus 30 days"          # CSS缓存30ExpiresByType image/jpeg "access plus 1 year"         # JPEG图片缓存1ExpiresByType image/png "access plus 1 year"          # PNG图片缓存1ExpiresByType image/gif "access plus 1 year"          # GIF图片缓存1ExpiresByType application/javascript "access plus 30 days"  # JS缓存30</IfModule>

重启Apache后,浏览器会缓存这些静态资源,后续访问直接从本地读取,降低服务器负载。

4. 启用Gzip压缩减小传输体积
使用mod_deflate模块对文本类内容(HTML、CSS、JS、JSON等)进行Gzip压缩,减少网络传输时间(压缩率通常为50%-70%)。在配置文件中添加:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
    AddOutputFilterByType DEFLATE image/svg+xml image/x-icon  # 压缩SVG和图标
    AddOutputFilterByType DEFLATE application/vnd.ms-fontobject application/x-font-ttf font/opentype  # 压缩字体文件
    DeflateCompressionLevel 9  # 压缩级别(1-99为最高,平衡压缩率与CPU消耗)
    SetOutputFilter DEFLATE    # 强制启用压缩
</IfModule>

注意:避免压缩图片(如JPEG、PNG),此类文件本身已压缩,再次压缩会增加CPU负担。重启Apache后,可通过浏览器开发者工具(Network面板)查看响应头中的Content-Encoding: gzip确认压缩生效。

5. 启用HTTP/2协议提升传输效率
HTTP/2相较于HTTP/1.1支持多路复用(一个连接并行传输多个请求)、头部压缩等功能,能显著提升页面加载速度。需先安装mod_http2模块(CentOS默认可能未安装),编辑配置文件:

# 安装mod_http2(若未安装)
sudo yum install mod_http2

# 编辑配置文件
sudo vi /etc/httpd/conf/httpd.conf

添加以下指令:

LoadModule http2_module modules/mod_http2.so
Protocols h2 http/1.1  # 启用HTTP/2,同时兼容HTTP/1.1

重启Apache后,浏览器会自动协商使用HTTP/2协议(可通过开发者工具的Protocol列确认)。

6. 移除不用的模块减少资源占用
Apache默认加载的模块较多,未使用的模块会占用内存和CPU资源。编辑模块配置目录(/etc/httpd/conf.modules.d/),注释掉不需要的模块(如mod_cgimod_ldap等,具体根据网站需求调整):

sudo vi /etc/httpd/conf.modules.d/00-base.conf

示例(注释掉mod_cgi):

# LoadModule cgi_module modules/mod_cgi.so

保存后重启Apache,减少不必要的资源消耗。

7. 优化访问日志减少IO开销
默认情况下,Apache会记录详细的访问日志(如logs/access_log),大量请求会导致磁盘IO瓶颈。可调整日志格式或级别,例如使用common格式(简化日志内容)或降低日志级别(warn):

# 在VirtualHost或全局配置中添加
CustomLog logs/access_log combined  # 使用combined格式(比common多Referer和User-Agent)
LogLevel warn                       # 日志级别设为warn(仅记录警告和错误,减少日志量)

注意:生产环境需平衡日志需求与性能,若需详细日志,可将日志写入内存文件系统(如tmpfs)或使用日志轮转工具(logrotate)定期归档。

8. 内核参数调优增强网络性能
调整Linux内核参数,优化TCP连接处理能力,减少TIME_WAIT状态连接(高并发场景下易导致端口耗尽)。编辑/etc/sysctl.conf文件,添加以下配置:

net.ipv4.tcp_fin_timeout = 30       # TIME_WAIT状态的超时时间(秒,默认60,缩短可快速释放端口)
net.ipv4.tcp_keepalive_time = 1200  # TCP keepalive探测间隔(秒,默认7200,缩短可快速检测死连接)
net.ipv4.tcp_tw_reuse = 1           # 允许重用TIME_WAIT状态的端口(提升并发能力)
net.ipv4.tcp_tw_recycle = 1         # 快速回收TIME_WAIT状态的端口(注意:NAT环境下可能导致连接失败,需谨慎使用)
net.ipv4.ip_local_port_range = 1024 65000  # 本地端口范围(增大范围,支持更多并发连接)
net.ipv4.tcp_max_syn_backlog = 8192 # SYN队列长度(默认1024,增大可应对高并发SYN请求)
net.ipv4.tcp_max_tw_buckets = 5000  # TIME_WAIT状态的最大连接数(超过则直接删除,避免内存耗尽)

执行sudo sysctl -p使配置立即生效。

0