此脚本用Curl监控Nginx网站状态,如回应502信息即重启LNMP。
#!/bin/bash
website=https://www.haiyun.me #修改为您的网址
if curl -I $website|grep "HTTP/1.1 502"; then
/root/lnmp restart
fi
添加到crontab计划任务:
crontab -e
*/5 * * * * sh /path/lnmp-502.sh #5分钟执行一次
发布时间:April 15, 2012 // 分类:Nginx // No Comments
由于Nginx处理php反代到后端php-cgi处理,如未收到回应会输出502 Bad Gateway,可优化配置防止出现此类情况。
也可以新建脚本监控lnmp出现502 Bad Gateway自动重启lnmp。
1.调整nginx与php-cgi通信方式,默认为unix-sock,更改为较稳定的TCP方式。
#https://www.haiyun.me
sed -i 's/\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/php/etc/php-fpm.conf
#设置TCP监听127.0.0.1:9000
sed -i 's/unix:\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/nginx/conf/nginx.conf
sed -i 's/unix:\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/nginx/conf/vhost/*
#设置nginx反代
2.修改php-cgi进程数量,每个php-cgi进程占用15M左右内存,由于lnmp为小内存优化,默认开启5个php-cgi进程,可根据自己情况适量增加,不要让系统因为内存不足而当掉。
sed -i 's/max_children">.</max_children">8</' /usr/local/php/etc/php-fpm.conf
#调整为8个
/root/lnmp restart #t重启lnmp
3.修改超时时间,lnmp已优化设置。
发布时间:April 14, 2012 // 分类:Shell,网络安全 // No Comments
此脚本用于分析统计secure日记文件,对ssh登录错误次数较多的IP用iptables封掉。
#!/bin/bash
#Created by https://www.haiyun.me
num=10 #上限
for i in `awk '/Failed/{print $(NF-3)}' /var/log/secure|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'`
do
iptables -I INPUT -p tcp -s $i --dport 22 -j DROP
done
加入crontab计划任务
crontab -e
* */5 * * * sh /path/file.sh #5小时执行一次
发布时间:April 14, 2012 // 分类:Shell,网络安全 // 3 Comments
此方法用于被动分析nginx日记找出请求数较大的IP,并用iptables封掉,如需主动限制,可参考通过nginx限制ip连接数防CC。
#!/bin/bash
#Created by https://www.haiyun.me
num=100 #上限
cd /home/wwwlogs
for i in `tail access.log -n 1000|awk '{print $1}'|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'`
#读取最新1000条记录,如果单IP超过100条就封掉。
do
iptables -I INPUT -p tcp -s $i --dport 80 -j DROP
done
加入crontab计划任务
crontab -e
*/5 * * * * sh /path/file.sh #5分钟执行一次
发布时间:April 14, 2012 // 分类:Shell,网络安全 // No Comments
此方法用于被动统计IP连接数,对连接数较大的IP用iptables封掉,如需主动限制,可参考通过iptables限制ip连接数防CC。
Shell脚本如下:
#!/bin/bash
#Created by https://www.haiyun.me
num=100 #上限
list=`netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'`
for i in $list
do
iptables -I INPUT -s $i --dport 80 -j DROP
done
加入crontab计划任务
crontab -e
*/5 * * * * sh /path/file.sh #5分钟执行一次