如何知道 Apache 何时拒绝连接

如何知道 Apache 何时拒绝连接

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

答案1

嗯,一般的解决方案是增加一些外部监控。

一种方法可能是运行自己的纳吉奥斯服务器。设置它肯定需要一些努力,但另一方面它也允许您进行各种监控。

一个更简单的解决方案可能是使用一些第三方监控服务,例如起来了吗?或者平多姆

除了确保服务器对 http 做出响应之外,最好还要验证响应页面是否包含一些预期的短语。这样,您就可以验证底层应用程序层是否正常工作。

答案2

我相信 mod_status 能够为您提供所需的信息,但如果 Apache 拒绝连接,它就不会那么有用:http://httpd.apache.org/docs/2.2/mod/mod_status.html

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

然而,最好的方法可能只是编写一个wget对网站的调用脚本,如果在短时间内(5-10 秒)两次检查失败,则自动转储相关日志数据。

答案3

~# 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 

相关内容