我是一个在t2.small EC2实例上运行的中型烹饪博客的勉强“系统pipe理员”,并且在LAMP堆栈上使用了WordPress。 尽pipe是一个相当令人尴尬的“系统pipe理员”,它确实运行真正可靠和有效,尽pipe运输很多stream量。 我已经尽了我所能做的一切,但每隔一段时间(大约每年一次),有人设法用DDOStypes的攻击来锤击它。 最容易发生的事情是,Apache服务器死亡,任何人从网站请求任何东西都会得到HTTP超时。 重新启动httpd服务立即解决了这个问题。
我想要做的是安排一个CRON的工作,每5分钟打一次网站,如果发现超时超过两次,它会重新启动httpd服务,并给我发一封电子邮件。 现在,这不是其中的“我无法正确设置我的Apache服务器,所以我会每小时重新启动一次”解决scheme。 当Apache不被黑客攻击时,apache被调整并运行得非常好。 我尽可能多地join防火墙反黑客最佳实践。 我的理由基本上是“黑客和疯子总是find新的方法来锤打我,当他们做我宁愿有10分钟的停电和电子邮件,而不是几个小时的停机时间(如果我睡着了或离开)”。 问题是,这是一个很好的解决scheme,还是有一个更好的,更系统化的方式来使用一些现有的技术来做到这一点?
注意:当我说apache服务器死亡时,它实际上看起来很好,当你运行顶部-U Apache。 它所做的是写10左右
(12)不能分配内存:AH00159:fork:无法分叉新进程
到error_log,只是没有做任何事情,直到重新启动。
您可以通过检查curl命令的返回码来轻松完成此操作:
#!/bin/bash # Request website (timeout five seconds) /usr/bin/curl -m5 $1 > /dev/null RC=$? if [ $RC -ne 0 ]; then echo Website: $1 not running, restarting apache. Curl RC: $RC /usr/sbin/service httpd restart fi
这个想法是,如果返回码不等于0,即请求失败,则重新启动apache。
你会把它放在这样的cron中:
*/5 * * * * /path/to/check_site.sh website.url.com >> /path/to/log/file.log 2>&1
这将确保它正在logging结果。
注意:这是一个绷带。 这是一个好主意,并确保这不是反复运行。 也许把send me an email ?
有一段时间,微软忽略了robots.txt,用他们的search引擎抓取工具敲打我的服务器。 当事情变得缓慢的时候,我会看到多达200个httpd实例,其中大多数是微软爬虫! 所以我实现了下面的脚本,它检查有多less个httpd实例正在运行,如果超过一定数量,就杀死它们。
这是相当古朴的。 您可以将第5行中的httpd实例数从“30”更改为任何您喜欢的。 您可以通过将“睡眠30”更改为任何您想要的秒数来更改监控之间的时间。 我只看着杀死微软爬虫实例,但它会parsing的Apache日志,我不想进入。
#!/bin/bash while [ 1 ] do set `psg httpd | wc` if test $1 -gt 30 then echo killing killall httpd else echo -n $1 ' ' fi sleep 30 done