nginx里limit_conn_zone和limit_req_zone内存参数应该怎样计算?

2013-12-15 22:37:05 +08:00
 pindleskin
我看到nginx里有两个防止dos的配置:
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
不知道上面这两个配置里storage的大小怎样计算?我看到说明里下面这么一句话:
One megabyte zone can keep about 32 thousand 32-byte states or about 16 thousand 64-byte states. If the zone storage is exhausted, the server will return the 503 (Service Temporarily Unavailable) error to all further requests.
按照这个意思,这个storage必须放入所有访问的ip?
阻止ddos攻击还有别的简单的解决方案吗?
7624 次点击
所在节点    问与答
8 条回复
freestyler
2013-12-15 22:39:11 +08:00
只有超过限制频率的ip才会存起来,不是所有访问ip。
pindleskin
2013-12-15 23:11:51 +08:00
@freestyler 多谢。也就是说一般情况下,10m可以存放16万个ip,应该够用了?根据说明,好像这个storage一旦用完,server就一直是503了,这个貌似相当可怕
julyclyde
2013-12-16 12:19:00 +08:00
@freestyler 那在它存起来之前怎么统计频率呢?
qiongqi
2013-12-16 15:29:25 +08:00
漏桶算法吧。
你可以找nginx的源代码看一下。
freestyler
2013-12-16 20:26:04 +08:00
@pindleskin 假设你设的限制是10r/s. 要用完10m, 需要160k个ip同时以这个频率访问你的站点.
freestyler
2013-12-16 20:27:26 +08:00
@julyclyde 没说清楚,其实都有存的,只是没超过频率的ip状态是会被替换出去的.
julyclyde
2013-12-30 10:43:24 +08:00
@freestyler 既然替换出去,那就永远到不了指定的数了
freestyler
2014-01-02 20:14:27 +08:00
@julyclyde 同时有超过频率访问的ip就会超了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/93268

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX