温馨提示×

CentOS Apache如何提高稳定性

小樊
58
2025-09-22 04:47:16
栏目: 智能运维

1. 优化内核参数,提升系统级稳定性
调整内核参数可增强系统对高并发的处理能力,减少资源耗尽风险。需修改以下关键参数:

  • 文件描述符限制:编辑/etc/security/limits.conf,添加* soft nofile 65535* hard nofile 65535,提升单个进程可打开的最大文件数(默认值过低易导致“Too many open files”错误);
  • TCP连接管理:编辑/etc/sysctl.conf,设置net.core.somaxconn = 65535(监听队列最大长度,避免连接被拒绝)、net.ipv4.tcp_max_syn_backlog = 65535(SYN队列大小,应对高并发连接请求)、net.ipv4.tcp_tw_reuse = 1(复用TIME_WAIT状态的连接,减少资源占用)、net.ipv4.tcp_fin_timeout = 30(缩短TIME_WAIT状态的超时时间,默认60秒);
  • 应用层配置:在/etc/sysctl.conf中添加net.ipv4.tcp_max_tw_buckets = 5000(限制TIME_WAIT连接的最大数量),防止大量僵尸连接占用系统资源。修改后执行sysctl -p使配置生效。

2. 调整MPM(多处理模块)设置,匹配服务器资源
MPM是Apache处理并发的核心组件,需根据服务器硬件配置(CPU核心数、内存大小)选择合适的模块并调整参数:

  • 模块选择:CentOS 7默认使用prefork(多进程模型,适合兼容性场景),但event(事件驱动模型,高并发性能更优)更适合现代Web应用。禁用prefork,启用event
    # 禁用prefork,启用event
    sed -i 's/LoadModule mpm_prefork_module/#LoadModule mpm_prefork_module/' /etc/httpd/conf.modules.d/00-mpm.conf
    sed -i 's/#LoadModule mpm_event_module/LoadModule mpm_event_module/' /etc/httpd/conf.modules.d/00-mpm.conf
    
  • 参数优化:编辑/etc/httpd/conf.modules.d/00-mpm.conf(event模块),设置:
    <IfModule mpm_event_module>
        StartServers 2          # 启动时的进程数(根据CPU核心数调整,如4核可设为4MinSpareThreads 25      # 最小空闲线程数(默认25,适合高并发)
        MaxSpareThreads 75      # 最大空闲线程数(避免过多空闲进程占用内存)
        ThreadLimit 64          # 单个进程的最大线程数(默认64,无需修改)
        ThreadsPerChild 25      # 每个子进程创建的线程数(如4核×25=100,并发能力)
        MaxRequestWorkers 150   # 最大并发请求数(根据内存计算:每进程约占用10-20MB,1GB内存可设为500MaxConnectionsPerChild 1000  # 每个子进程处理的请求数(避免内存泄漏,设为0表示不限制)
    </IfModule>
    
    注:MaxRequestWorkers需根据服务器内存调整(公式:可用内存(MB)/每个Apache进程占用内存(MB),如1GB内存、每个进程15MB,则设为60-80)。

3. 启用缓存与压缩,降低服务器负载

  • 静态文件缓存:使用mod_expires模块缓存静态资源(CSS、JS、图片),减少重复请求对服务器的压力。编辑Apache配置文件(/etc/httpd/conf/httpd.conf),添加:
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/css "access plus 30 days"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png "access plus 1 year"
        ExpiresByType image/gif "access plus 1 year"
        ExpiresByType application/javascript "access plus 30 days"
    </IfModule>
    
  • Gzip压缩:使用mod_deflate模块压缩文本类数据(HTML、CSS、JS),减小传输体积(通常可减少50%-70%的传输量)。编辑配置文件,添加:
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
    </IfModule>
    
    注:启用压缩会增加少量CPU开销,但对带宽有限或移动端用户来说,收益远大于成本。

4. 精简模块与服务,减少攻击面

  • 禁用不必要的模块:Apache默认启用大量模块(如autoindexcgi),禁用未使用的模块可降低资源消耗和安全风险。执行以下命令查看已启用模块:
    httpd -M
    
    禁用模块(如autoindex):
    sed -i 's/LoadModule autoindex_module/#LoadModule autoindex_module/' /etc/httpd/conf.modules.d/00-base.conf
    
    重启Apache使更改生效:systemctl restart httpd
  • 限制服务范围:使用防火墙(firewalldiptables)仅开放必要的端口(HTTP 80、HTTPS 443),阻止非法访问:
    firewall-cmd --permanent --add-service=http
    firewall-cmd --permanent --add-service=https
    firewall-cmd --reload
    

5. 隐藏敏感信息,降低被攻击风险

  • 隐藏版本信息:修改Apache配置文件(/etc/httpd/conf/httpd.conf),设置:
    ServerTokens Prod    # 不显示服务器版本和操作系统信息
    ServerSignature Off  # 不在错误页面显示服务器信息
    
    这样,当发生404或500错误时,错误页面不会暴露Apache的版本号,减少黑客针对性攻击的机会。

6. 强化日志管理,快速定位问题

  • 优化日志级别:调整日志级别为warn(默认为info),减少不必要的日志记录(如常规访问日志),降低磁盘I/O压力。编辑配置文件,添加:
    LogLevel warn
    
  • 分离日志文件:将访问日志(access_log)和错误日志(error_log)分开存储,便于后续分析。编辑虚拟主机配置(/etc/httpd/conf.d/*.conf),添加:
    CustomLog /var/log/httpd/access_log combined
    ErrorLog /var/log/httpd/error_log
    
  • 定期归档日志:使用logrotate工具定期压缩和删除旧日志(如保留30天),避免日志文件过大占用磁盘空间。编辑/etc/logrotate.d/httpd,添加:
    /var/log/httpd/*.log {
        daily
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
        create 640 root root
        sharedscripts
        postrotate
            systemctl reload httpd > /dev/null 2>&1 || true
        endscript
    }
    
    这样,日志文件会每天压缩并保留30天,超过30天的日志会被自动删除。

7. 定期更新与监控,预防潜在问题

  • 更新软件版本:定期使用yum更新Apache及其依赖组件(如httpdmod_ssl),修复已知的安全漏洞:
    yum update httpd -y
    
  • 监控系统性能:使用top(查看CPU、内存使用率)、iotop(查看磁盘I/O)、netstat(查看网络连接)等工具实时监控服务器状态;安装sysstat工具(yum install sysstat -y),记录历史性能数据(如CPU利用率、内存占用),便于后续分析瓶颈:
    systemctl enable sysstat
    systemctl start sysstat
    
    通过分析/var/log/sa/saXX文件(XX为日期),可了解服务器的性能趋势,提前预警资源不足的问题。

0