好的!CentOS 8.4的具体配置路径和命令:
第一步:RLimit配置
在CentOS 8.4中,需要编辑虚拟主机配置:
bash
# 编辑主配置文件或虚拟主机配置
sudo vi /etc/httpd/conf/httpd.conf
# 或者创建专门的CGI配置文件
sudo vi /etc/httpd/conf.d/cgi-limits.conf
添加内容:
apache
<Directory "/var/www/cgi-bin">
Options +ExecCGI
SetHandler cgi-script
RLimitCPU 30 60
RLimitMEM 67108864 134217728
RLimitNPROC 5 10
RLimitNOFILE 100 200
</Directory>
第二步:Apache进程数限制
在CentOS 8.4中编辑MPM配置:
bash
# 编辑prefork模块配置
sudo vi /etc/httpd/conf.modules.d/00-mpm.conf
确保使用prefork模式:
apache
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
然后编辑主配置:
bash
sudo vi /etc/httpd/conf/httpd.conf
添加或修改:
apache
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 30 # 严格限制
ServerLimit 30
MaxConnectionsPerChild 100
</IfModule>
第三步:定时清理CGI(CentOS 8.4版本)
bash
# 编辑crontab
sudo crontab -e
# 添加定时任务(CentOS兼容版本)
*/5 * * * * /usr/bin/pgrep -f 'perl.*\.cgi' | while read pid; do ps -o etime= -p $pid | grep -q '0[5-9]:\|[1-9][0-9]:' && kill $pid; done
重启Apache服务:
bash
# CentOS 8.4的Apache服务名是httpd
sudo systemctl restart httpd
sudo systemctl enable httpd
# 检查配置是否正确
sudo httpd -t
# 查看Apache状态
sudo systemctl status httpd
CentOS 8.4特有的检查命令:
bash
# 查看当前Apache进程
ps aux | grep httpd | wc -l
# 查看CGI进程
ps aux | grep perl
# 查看Apache错误日志
sudo tail -f /var/log/httpd/error_log
# 查看访问日志
sudo tail -f /var/log/httpd/access_log
验证配置:
bash
# 检查MPM模式
httpd -V | grep -i mpm
# 查看加载的模块
httpd -M | grep mpm
防火墙确认(如果需要):
bash
# CentOS 8.4检查防火墙
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
监控脚本(CentOS 8.4优化版):
bash
# 创建监控脚本
sudo vi /usr/local/bin/cgi_monitor.sh
bash
#!/bin/bash
echo "=== $(date) ==="
echo "CGI进程数: $(pgrep -f 'perl.*\.cgi' | wc -l)"
echo "httpd进程数: $(pgrep httpd | wc -l)"
echo "内存使用: $(free -h | grep Mem | awk '{print $3"/"$2}')"
echo "负载: $(uptime | awk -F'load average:' '{print $2}')"
bash
# 设置执行权限
sudo chmod +x /usr/local/bin/cgi_monitor.sh
# 添加到crontab进行定期监控
*/2 * * * * /usr/local/bin/cgi_monitor.sh >> /var/log/cgi_monitor.log
CentOS 8.4的配置就是这样,重点是使用httpd而不是apache2作为服务名。配置完成后重启httpd服务即可生效。