如何知道Apache何时拒绝连接

我的Freebsd服务器最近有很多DoS攻击,导致Apache或Mysql停止正常连接。 当mysql达到最大连接时,我的应用程序会发送一封有关每个mysql错误的电子邮件,所以我可以阻止邪恶的IP。 但是,当Apache拒绝连接,除非我自己访问网站,否则我不会知道。 是否有可能知道Apache何时达到最大连接? 这样我可以调整Apache或阻止恶意IP? 谢谢!

那么,一般的解决办法是增加一些外部监测。

一种方法可能是运行你自己的Nagios服务器。 build立它肯定有一些努力,但另一方面也可以让你做各种监测。

一个可能更简单的解决scheme是使用一些第三方监控服务,比如是否已经启动? 或pingdom 。

除了确保您的服务器对http的响应,还确认响应页面包含某些预期的短语是好事情。 这样你就可以得到一些validation,底层应用程序层也有一些工作。

我相信,mod_status将能够给你你需要的信息,但是如果Apache拒绝连接,它将不会有用: http : //httpd.apache.org/docs/2.2/mod/mod_status.html

Apachetop也应该能够告诉你当前的连接数量。 它在大多数存储库中都可用。

但是,最好的方法可能只是将wget调用脚本编写到站点,并在短时间(5-10秒)内未能通过两次检查时自动转储相关的日志数据。

 ~# curl -sIL localhost HTTP/1.1 200 OK Date: Mon, 29 Aug 2011 03:28:42 GMT Server: Apache/2.2.16 (Debian) Last-Modified: Mon, 18 Jul 2011 22:20:41 GMT ETag: "f902-b1-4a85f68d52040" Accept-Ranges: bytes Content-Length: 177 Vary: Accept-Encoding Content-Type: text/html ~# echo $? 0 ~# cat >mycheck.sh #!/bin/bash curl -sIL localhost 2>&1 >/dev/null if [ $? -eq 0 ]; then echo " Success !" else echo " FAIL " fi CTRL^D ~# sh mycheck.sh Success ! ~# iptables -I INPUT -p tcp --dport 80 -j DROP ~# sh mycheck.sh FAIL