文章目录
-
-
- 1. Apache核心配置文件与基础优化{#basic-configuration}
-
- 1.1 核心配置文件结构解析{#config-file-structure}
- 1.2 基础必备配置优化{#basic-optimization}
- 1. 定义ServerName,避免反向解析消耗
- 2. 优化监听端口配置
- 3. 限制请求超时时间
- 4. 优化文件权限配置
- 2. 性能核心优化:MPM模块配置{#mpm-optimization}
-
- 2.1 MPM模块三种模式介绍{#mpm-modes}
- 2.2 不同场景下的MPM参数调优{#mpm-params-tuning}
- 1. 场景一:2核4G服务器(中小网站,并发100-200)
- 2. 场景二:4核8G服务器(中大型网站,并发300-500)
- 3. 场景三:兼容旧模块(如mod_php),使用prefork模式
- 3. 安全加固配置{#security-hardening}
-
- 3.1 基础安全配置{#basic-security}
- 1. 隐藏Apache版本信息
- 2. 限制HTTP请求方法
- 3. 配置防盗链
- 3.2 HTTPS配置与SSL优化{#https-ssl-optimization}
- 1. 安装SSL证书
- 2. 手动优化HTTPS配置
- 4. 静态资源优化{#static-resource-optimization}
-
- 4.1 启用压缩传输(mod_deflate){#compression-with-mod-deflate}
- 4.2 配置浏览器缓存(mod_expires){#browser-cache-with-mod-expires}
- 5. 日志管理优化{#log-management-optimization}
-
- 5.1 日志级别与格式优化{#log-level-format}
- 5.2 日志切割配置{#log-rotation}
- 6. 监控与问题排查{#monitoring-troubleshooting}
-
- 6.1 启用mod_status监控服务器状态{#mod-status-monitoring}
- 6.2 常见性能问题排查{#common-issues-troubleshooting}
- 7 总结
-
1. Apache核心配置文件与基础优化{#basic-configuration}
1.1 核心配置文件结构解析{#config-file-structure}
Apache的核心配置文件默认位于/etc/httpd/conf/httpd.conf(CentOS/RHEL)或/etc/apache2/apache2.conf(Ubuntu/Debian),整体分为三个核心部分:
Global Environment(全局配置):定义Apache的运行环境,如安装目录、进程PID、监听端口、加载模块等;
Main Server Configuration(主服务器配置):定义默认网站的核心参数,如网站根目录、管理员邮箱、默认主页等;
Virtual Hosts(虚拟主机配置):用于配置多个网站,支持基于域名、IP、端口的虚拟主机。
此外,Apache还会通过Include指令加载额外配置文件,如CentOS的/etc/httpd/conf.d/*.conf目录下的模块配置,Ubuntu的/etc/apache2/mods-available/、/etc/apache2/sites-available/目录下的配置文件。
1.2 基础必备配置优化{#basic-optimization}
基础配置优化主要针对全局配置和主服务器配置,目的是减少不必要的资源消耗,提升服务器基础响应效率:
1. 定义ServerName,避免反向解析消耗
默认情况下Apache会尝试反向解析客户端IP获取主机名,增加服务器负载,需明确指定ServerName:
# 原配置(可能注释或未设置)
# ServerName www.example.com:80
# 优化后配置(替换为实际域名或服务器IP)
ServerName www.yourdomain.com:80
2. 优化监听端口配置
明确监听的IP和端口,避免默认监听所有网卡导致的安全风险和资源占用:
# 原配置
# Listen 80
# 优化后配置(仅监听指定IP的80端口,多IP场景按需配置)
Listen 192.168.1.100:80
# 若需启用HTTPS,添加443端口监听
Listen 192.168.1.100:443
3. 限制请求超时时间
合理设置超时时间,避免无效连接占用服务器资源:
# 客户端与服务器断开连接的超时时间(默认120秒,优化为30秒)
Timeout 30
# 持续连接的超时时间(默认15秒,优化为5秒)
KeepAliveTimeout 5
4. 优化文件权限配置
Apache运行用户建议使用非root用户(如apache),并限制网站根目录权限,避免权限泄露:
# 运行Apache的用户和组
User apache
Group apache
# 网站根目录权限配置(禁止目录浏览,限制.htaccess生效范围)
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
# 禁止目录浏览(默认可能开启Indexes,存在安全风险)
Options FollowSymLinks
# 不允许.htaccess覆盖主配置(提升性能)
AllowOverride None
# 允许所有IP访问(生产环境建议按实际需求限制IP)
Require all granted
</Directory>
# 禁止访问敏感文件(如.htpasswd、.htaccess)
<FilesMatch "^\\.ht">
Require all denied
</FilesMatch>
2. 性能核心优化:MPM模块配置{#mpm-optimization}
MPM(Multi-Processing Module,多处理模块)是Apache的核心性能模块,负责处理客户端连接的创建、管理与销毁。Apache提供三种MPM模式,需根据服务器硬件配置和业务场景选择并优化参数。
2.1 MPM模块三种模式介绍{#mpm-modes}
| prefork | 多进程模型,每个进程处理一个连接,无线程安全问题 | CPU核心少、内存较大的服务器,兼容旧模块(如PHP的mod_php) | 优点:稳定、兼容好;缺点:内存占用高,并发处理能力有限 |
| worker | 多进程+多线程模型,每个进程包含多个线程,每个线程处理一个连接 | CPU核心多、内存中等的服务器,需要平衡并发与内存占用 | 优点:内存占用低,并发能力强;缺点:存在线程安全问题,部分旧模块不兼容 |
| event | worker模式的改进版,通过事件驱动处理空闲连接,支持更高并发 | 高并发、大流量场景(如电商秒杀、大型门户),Linux系统(推荐) | 优点:并发能力最强,内存占用低;缺点:对系统环境要求高,旧系统兼容性差 |
| 查看当前启用的MPM模式命令: |
# CentOS/RHEL
httpd -V | grep -i mpm
# Ubuntu/Debian
apache2 -V | grep -i mpm
2.2 不同场景下的MPM参数调优{#mpm-params-tuning}
MPM配置文件默认位于/etc/httpd/conf.modules.d/00-mpm.conf(CentOS)或/etc/apache2/mods-available/mpm-*.load(Ubuntu),需根据模式修改对应参数。以下针对不同硬件配置(以CentOS为例)提供优化方案:
1. 场景一:2核4G服务器(中小网站,并发100-200)
推荐使用event模式(无兼容问题时)或worker模式:
# 启用event模式
LoadModule mpm_event_module modules/mod_mpm_event.so
# 禁用其他MPM模式
# LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# LoadModule mpm_worker_module modules/mod_mpm_worker.so
<IfModule mpm_event_module>
StartServers 2 # 启动时创建的进程数
MinSpareThreads 25 # 最小空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadsPerChild 25 # 每个进程的常驻线程数(核心参数)
MaxRequestWorkers 200 # 最大并发连接数(= 进程数 × 线程数)
MaxConnectionsPerChild 1000 # 每个进程处理的最大请求数(避免内存泄漏,0表示无限制)
</IfModule>
2. 场景二:4核8G服务器(中大型网站,并发300-500)
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 50
MaxSpareThreads 150
ThreadsPerChild 25
ServerLimit 8 # 最大进程数限制
MaxRequestWorkers 400
MaxConnectionsPerChild 2000
</IfModule>
3. 场景三:兼容旧模块(如mod_php),使用prefork模式
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# 禁用其他MPM模式
# LoadModule mpm_event_module modules/mod_mpm_event.so
# LoadModule mpm_worker_module modules/mod_mpm_worker.so
<IfModule mpm_prefork_module>
StartServers 5 # 启动时创建的进程数
MinSpareServers 5 # 最小空闲进程数
MaxSpareServers 10 # 最大空闲进程数
MaxRequestWorkers 150 # 最大并发连接数(= 最大进程数)
MaxConnectionsPerChild 1000 # 每个进程处理的最大请求数
</IfModule>
参数调优原则:
3. 安全加固配置{#security-hardening}
Apache的安全配置直接影响网站数据和服务器安全,需从基础防护、HTTPS加密、访问控制等方面全面加固。
3.1 基础安全配置{#basic-security}
1. 隐藏Apache版本信息
默认情况下Apache会在响应头和错误页面暴露版本号和操作系统信息,增加攻击风险:
# 隐藏版本号和模块信息
ServerTokens Prod
# 错误页面不显示服务器版本信息
ServerSignature Off
2. 限制HTTP请求方法
仅允许GET、POST、HEAD方法,禁止PUT、DELETE等危险方法:
<Directory "/var/www/html">
# 仅允许GET、POST、HEAD方法
<LimitExcept GET POST HEAD>
Require all denied
</LimitExcept>
</Directory>
3. 配置防盗链
防止网站资源被其他网站盗用,减少带宽消耗:
# 启用mod_rewrite模块(需先确保模块已加载)
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "/var/www/html">
AllowOverride All # 允许.htaccess生效(或直接在主配置中配置rewrite规则)
RewriteEngine On
# 允许自己域名和空Referer(直接输入URL访问)
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\\.)?yourdomain\\.com [NC]
# 拦截图片、视频、音频等资源
RewriteRule \\.(jpg|jpeg|png|gif|mp4|mp3|flv)$ – [F,L]
</Directory>
3.2 HTTPS配置与SSL优化{#https-ssl-optimization}
HTTPS可加密客户端与服务器之间的传输数据,防止数据泄露和篡改,同时提升搜索引擎排名。以下是基于Let’s Encrypt免费证书的HTTPS配置流程:
1. 安装SSL证书
先通过Certbot工具获取Let’s Encrypt证书:
# 安装Certbot(CentOS)
yum install -y epel-release
yum install -y certbot python3-certbot-apache
# 获取并自动配置证书(自动修改Apache配置)
certbot –apache -d yourdomain.com -d www.yourdomain.com
2. 手动优化HTTPS配置
证书安装完成后,在虚拟主机配置文件(如/etc/httpd/conf.d/ssl.conf)中优化SSL参数:
<VirtualHost *:443>
ServerName www.yourdomain.com
DocumentRoot "/var/www/html"
# SSL核心配置
SSLEngine On
SSLCertificateFile "/etc/letsencrypt/live/yourdomain.com/cert.pem" # 域名证书
SSLCertificateKeyFile "/etc/letsencrypt/live/yourdomain.com/privkey.pem" # 私钥(权限需设为600)
SSLCertificateChainFile "/etc/letsencrypt/live/yourdomain.com/chain.pem" # 证书链
# SSL性能优化
SSLSessionCache shared:SSL:10m # 共享SSL会话缓存,减少握手消耗
SSLSessionTimeout 10m # 会话超时时间
SSLProtocols TLSv1.2 TLSv1.3 # 仅启用安全的TLS协议,禁用SSLv3、TLSv1.0、TLSv1.1
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384 # 优先使用强加密套件
SSLHonorCipherOrder On # 优先使用服务器端指定的加密套件
# 强制HTTP跳转HTTPS(也可在80端口虚拟主机中配置)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
# 80端口虚拟主机配置(仅用于跳转HTTPS)
<VirtualHost *:80>
ServerName www.yourdomain.com
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
4. 静态资源优化{#static-resource-optimization}
Apache常作为静态资源服务器(图片、CSS、JS、静态HTML),通过启用压缩和缓存,可大幅减少传输带宽,提升客户端加载速度。
4.1 启用压缩传输(mod_deflate){#compression-with-mod-deflate}
mod_deflate模块可对静态资源和动态响应进行Gzip压缩,减少文件大小(通常压缩率可达30%-70%):
# 启用mod_deflate模块
LoadModule deflate_module modules/mod_deflate.so
# 压缩配置
<IfModule mod_deflate.c>
# 启用压缩
DeflateEngine On
# 压缩级别(1-9,级别越高压缩率越高,但CPU消耗越大,推荐6)
DeflateCompressionLevel 6
# 对以下MIME类型的文件进行压缩
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript application/x-javascript text/javascript
AddOutputFilterByType DEFLATE image/svg+xml image/jpeg image/png # 图片可选择性压缩(压缩率较低,消耗CPU)
# 排除不需要压缩的文件(如已压缩的图片、视频)
SetEnvIfNoCase Request_URI \\.(gif|jpg|jpeg|png|mp4|mp3)$ no-gzip dont-vary
# 确保压缩后的响应头包含Vary: Accept-Encoding
Header append Vary Accept-Encoding
</IfModule>
4.2 配置浏览器缓存(mod_expires){#browser-cache-with-mod-expires}
mod_expires模块通过设置HTTP响应头的Expires和Cache-Control字段,让客户端浏览器缓存静态资源,减少重复请求:
# 启用mod_expires模块
LoadModule expires_module modules/mod_expires.so
# 缓存配置
<IfModule mod_expires.c>
ExpiresActive On # 启用缓存
# 对不同类型资源设置不同缓存时间
ExpiresByType text/html "access plus 10 minutes" # HTML文件缓存10分钟
ExpiresByType text/css "access plus 7 days" # CSS文件缓存7天
ExpiresByType application/javascript "access plus 7 days" # JS文件缓存7天
ExpiresByType image/jpeg "access plus 30 days" # JPG图片缓存30天
ExpiresByType image/png "access plus 30 days" # PNG图片缓存30天
ExpiresByType image/svg+xml "access plus 30 days" # SVG图片缓存30天
ExpiresByType application/font-woff2 "access plus 30 days" # 字体文件缓存30天
</IfModule>
5. 日志管理优化{#log-management-optimization}
Apache日志包含访问日志(access.log)和错误日志(error.log),合理的日志配置可帮助排查问题,同时避免日志过大占用磁盘空间。
5.1 日志级别与格式优化{#log-level-format}
# 错误日志配置
ErrorLog "/var/log/httpd/error.log"
# 日志级别(从低到高:debug、info、notice、warn、error、crit、alert、emerg,生产环境推荐warn)
LogLevel warn
# 访问日志配置
# 定义日志格式(包含时间、客户端IP、请求方法、URL、状态码、Referer、User-Agent)
LogFormat "%h %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined
# 使用combined格式记录访问日志
CustomLog "/var/log/httpd/access.log" combined
# 禁用不必要的日志(如服务器内部重定向日志)
RewriteLogLevel 0
5.2 日志切割配置{#log-rotation}
默认情况下Apache日志会持续写入一个文件,长期运行会导致文件过大,难以管理。可通过logrotate工具实现日志切割(Linux系统自带):
# 创建logrotate配置文件
vi /etc/logrotate.d/httpd
# 配置内容如下
/var/log/httpd/*.log {
daily # 按天切割
rotate 15 # 保留15天的日志
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(保留最新一天的日志不压缩)
missingok # 日志文件不存在时不报错
notifempty # 空日志文件不切割
create 640 apache apache # 新建日志文件的权限和所有者
sharedscripts # 所有日志切割完成后执行一次脚本
postrotate # 切割后重启Apache使配置生效
/bin/systemctl reload httpd.service >/dev/null 2>&1 || true
endscript
}
6. 监控与问题排查{#monitoring-troubleshooting}
6.1 启用mod_status监控服务器状态{#mod-status-monitoring}
mod_status模块可实时监控Apache服务器的运行状态,包括并发连接数、进程/线程状态、请求数等核心指标:
# 启用mod_status模块
LoadModule status_module modules/mod_status.so
# 配置状态页面访问权限(仅允许内网IP访问)
<Location "/server-status">
SetHandler server-status
# 允许192.168.1.0/24网段访问,其他IP拒绝
Require ip 192.168.1.0/24
# 显示详细状态信息(包含每个连接的详细信息)
ExtendedStatus On
</Location>
配置完成后,访问http://yourdomain.com/server-status即可查看实时状态。核心指标说明:
- Total Accesses:总请求数;
- Total kBytes Served:总传输字节数;
- Busy Workers:忙碌的进程/线程数;
- Idle Workers:空闲的进程/线程数;
- Current Requests:当前并发请求数。
6.2 常见性能问题排查{#common-issues-troubleshooting}
1. 服务器响应缓慢,并发连接数高
排查方向:
– 查看mod_status状态,确认Busy Workers是否接近MaxRequestWorkers(若接近,需提升MaxRequestWorkers);
– 检查服务器CPU、内存使用率(top命令),若CPU过高,可能是压缩级别过高或MPM线程数过多;
– 查看错误日志(error.log),是否存在数据库连接超时、文件权限等问题。
2. 连接超时,客户端无法访问
排查方向:
– 检查防火墙是否开放80/443端口(iptables -L -n 或 firewall-cmd –list-ports);
– 查看Apache监听端口是否正确(netstat -tulnp | grep httpd);
– 检查MaxRequestWorkers是否过小,导致连接被拒绝(error.log中会有“server reached MaxRequestWorkers setting”错误)。
3. 日志文件过大,磁盘空间不足
排查方向:
– 检查logrotate配置是否生效(查看/var/log/httpd/目录下是否有压缩的旧日志);
– 降低日志级别(如从info改为warn),减少不必要的日志输出;
– 清理过期日志(删除超过保留期限的日志文件)。
7 总结
本文从基础配置、性能核心、安全加固、静态资源、日志管理到监控排查,全面覆盖了Apache HTTP服务器配置优化的核心实战要点。Apache优化的核心逻辑是“按需配置、平衡性能与资源”:基础配置优化减少无效资源消耗,MPM模块调优充分发挥服务器并发能力,安全配置筑牢服务器防线,静态资源优化提升客户端体验,日志与监控则保障服务器稳定运行。建议运维工程师根据服务器硬件配置、业务场景(并发量、资源类型)逐步调整优化参数,通过mod_status监控效果,持续迭代优化。




