如何提高Apache2在CentOS上的稳定性
导读:提升 Apache2 稳定性的系统化做法 一 运行环境与基础加固 保持系统与软件为最新:定期执行 yum update -y,并重启 httpd 使内核与模块更新生效。 选择稳定可靠的 MPM:若使用 PHP(非线程安全),优先 pref...
提升 Apache2 稳定性的系统化做法
一 运行环境与基础加固
- 保持系统与软件为最新:定期执行 yum update -y,并重启 httpd 使内核与模块更新生效。
- 选择稳定可靠的 MPM:若使用 PHP(非线程安全),优先 prefork;追求高并发与长连接建议 event(需模块支持)。
- 隐藏版本信息并降低攻击面:设置 ServerTokens Prod、ServerSignature Off;禁用不必要的模块(如 autoindex、status、userdir)。
- 运行身份与权限:确保以 apache 用户运行,目录权限最小化(如 /var/www/html 750,/var/log/httpd 700),并正确设置 SELinux 上下文(如 httpd_sys_content_t)。
- 防火墙放行:开放 80/443 端口(firewall-cmd --permanent --add-service=http --add-service=https & & firewall-cmd --reload)。
- 基础监控:启用 mod_status 并设置受限访问,持续观察 /var/log/httpd/error_log 与 access_log 的异常模式。
二 关键配置优化
- 连接与会话
- 启用持久连接并控制资源占用:KeepAlive On、MaxKeepAliveRequests 100、KeepAliveTimeout 5。
- 合理超时:Timeout 60,减少慢速或空闲连接占用。
- 提升突发承载能力:ListenBacklog 1024。
- 高效传输:EnableSendfile On、EnableMMAP On。
- 并发与内存
- 依据负载选择并调优 MPM(见下一节示例),避免 MaxRequestWorkers/MaxClients 过大导致内存耗尽。
- 降低 DNS 反向解析开销:HostnameLookups Off。
- 静态资源减负
- 启用压缩:mod_deflate(压缩 text/html、text/css、application/javascript 等)。
- 配置浏览器缓存:mod_expires(如 image/ 30 days,text/css/js 7–30 days*)。
- 典型场景
- 反向代理/后端加速:mod_proxy + mod_cache(如 CacheEnable disk /,CacheRoot /var/cache/apache2)。
三 MPM 选择与示例配置
- 场景建议:
- prefork:兼容 PHP(非线程安全)、强调稳定性;
- event:高并发、长连接、API/WebSocket 场景更稳。
- 示例(需按内存与压测微调):
# prefork(适合 PHP 非线程安全)
<
IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 256
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
<
/IfModule>
# event(高并发与长连接)
<
IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
<
/IfModule>
- 切换 MPM 要点:安装目标模块(如 httpd-event),禁用当前 MPM 模块文件,再启动 httpd;变更前务必备份并在维护窗口操作。
四 内核与网络栈优化
- 开启 SYN Cookies:net.ipv4.tcp_syncookies = 1,缓解 SYN 洪泛。
- 复用 TIME_WAIT 连接:在 Linux 内核 ≥ 4.12 环境优先使用 net.ipv4.tcp_tw_reuse = 1;避免使用已废弃的 tcp_tw_recycle。
- 缩短回收时间:net.ipv4.tcp_fin_timeout = 30。
- 提升连接队列与处理能力:net.core.somaxconn = 65535、net.core.netdev_max_backlog = 30000。
- 持久化:将参数写入 /etc/sysctl.conf 并执行 sysctl -p 生效。
五 监控 维护与容量规划
- 配置语法与热加载:变更前执行 apachectl configtest;使用 systemctl reload httpd 平滑生效。
- 日志与告警:集中分析 error_log/access_log,对 MaxRequestWorkers 达到上限、频繁 5xx、连接超时 等设定阈值告警。
- 资源与容量:按公式估算并发占用(如:Apache 进程数 ≈ KeepAliveTimeout × 每秒请求数 / 平均 KeepAlive 请求;占用内存 ≈ 进程数 × 单进程内存),据此设置 MaxRequestWorkers 与后端连接池,避免 OOM 与雪崩。
- 高可用与扩展:在高峰期引入 负载均衡 与 CDN,对静态资源与可缓存内容做边缘分发,降低源站压力。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何提高Apache2在CentOS上的稳定性
本文地址: https://pptw.com/jishu/785600.html
