我是一个中型烹饪博客的不情愿“系统管理员”,该博客在 t2.small EC2 实例上运行,并在 LAMP 堆栈上使用 WordPress。尽管是一个相当令人尴尬的糟糕“系统管理员”,但它实际上运行非常可靠和高效,尽管传输了大量的流量。我已经尽我所能,但时不时地(大约每年一次)有人设法用 DDOS 类型的攻击来敲打它。往往会发生 apache 服务器死机,并且任何从网站请求任何内容的人都会收到 HTTP 超时。重新启动 httpd 服务会立即解决问题。
我想做的是安排一个 CRON 作业每隔 5 分钟调用一次网站,如果它发现超时两次以上,它会重新启动 httpd 服务并向我发送一封电子邮件。现在,这不是“我无法正确设置我的 apache 服务器,所以我会每小时重新启动它”的解决方案之一。Apache 进行了调整,并且在没有被黑客入侵时运行良好。我已经尽可能多地采用了防火墙反黑客最佳实践。我的理由基本上是“黑客和疯子总是在寻找新的方法来打击我,当他们这样做时,我宁愿有 10 分钟的中断和一封电子邮件,而不是可能的几个小时的停机时间(如果我睡着了或不在的话)”。问题是,这是一个好的解决方案,还是有更好、更系统的方法来使用一些现有技术来做到这一点?
注意:当我说 apache 服务器死掉时,实际上运行 top -U apache 时看起来还不错。它的作用是写大约 10
(12)Cannot allocate memory: AH00159: fork: Unable to fork new process
到 error_log 并且在重新启动之前根本不做任何事情。
您可以通过检查命令的返回码轻松做到这一点
curl
:思路是如果返回码不等于0,即请求失败,则重启apache。
您可以将它放在 cron 中,如下所示:
这将确保它正在记录结果。
注意:这是一个创可贴。继续并确保它不会重复运行是个好主意。也许放在一条
send me an email
线上?有一段时间,微软忽略了 robots.txt 并用他们的搜索引擎爬虫来攻击我的服务器。当事情变慢时,我会看到多达 200 个 httpd 实例,其中大多数是 Microsoft 爬虫!所以我实现了以下脚本,它检查有多少 httpd 实例正在运行,如果超过一定数量,则将它们全部杀死。
这是相当简单的。您可以将第 5 行的 httpd 实例数从“30”更改为您喜欢的任何值。您可以通过将“sleep 30”更改为您喜欢的任何秒数来更改监控之间的时间。我只考虑杀死 Microsoft 爬虫实例,但它会解析 apache 日志,我不想进入。