Nginx打开DDOS文件太多了

我现在有一个ddos的问题。 我的networking服务器是在一个反向代理(cloudflare)后面,我知道不应该依靠他们的免费计划。 Cloudflare处于攻击模式下,导致访问者完成浏览器检查。 通过直接IP访问站点将只redirect他们。 我正在使用nginx的请求限制function,但这似乎没有帮助,因为攻击者正在使用一个巨大的代理列表。 请求中没有巨大的红旗,所以我不确定WAF是否有帮助。 不过有趣的是,当我查看错误日志时, 我看到什么导致DOS是以下错误(该文件完全填充)

2015/09/03 19:22:12 [crit] 3427#0: accept4() failed (24: Too many open files) 

我现在认为他们正在通过直接的IP攻击,但redirect不足以阻止他们使我达到我的开放文件的限制。 有什么我可以做,阻止这个?

谢谢

编辑:我不相信他们直接攻击IP,因为我在网站上运行的软件仍然检测到攻击者造成的大量的stream量。

编辑:这是他的垃圾邮件的交通的几行。 cloudflare的开箱即用WAF会阻止这个吗?

 87.135.112.116 - - [05/Sep/2015:14:47:53 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0)" 113.22.35.98 - - [05/Sep/2015:14:47:53 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16" 2.50.56.236 - - [05/Sep/2015:14:47:54 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36" 93.170.133.26 - - [05/Sep/2015:14:47:54 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" 

打开的文件太多意味着你已经在/etc/nginx/nginx.conf (如果使用的是基于RHEL的linux)中默认定义了nginx的ulimitvariables。 这意味着nginx有太多的开放连接,无法再发送更多的请求。 您可以通过增加以下variables来更正此问题:

 worker_rlimit_nofile <enter value here>; 

您可以使用新值replace尖括号中的信息(默认值为1024)。 这将增加您的打开文件数量(并因此增加您的打开连接数,因为每个连接是一个文件)。

三件事:

  1. 找出你的服务器的限制(这将取决于你的cpu数量和RAM的数量)。

  2. worker_rlimit_nofile位于configuration文件的“worker_processes”variables下方的顶部。

  3. 一旦你在文件中设置了variables,你将需要重新启动nginx。