什么会导致区域内存耗尽以及Nginx如何应对?

limit_conn_zone指令耗尽指定给连接区域的内存的可能情况是什么?这种情况下的含义是什么?

假设我在我的configuration中有这个:

 http { limit_conn_zone $binary_remote_addr zone=connzone:1m; ... server { limit_conn connzone 5; 

根据文档, connzone在64位服务器上为connzone分配16000个状态。 它也是这样说的

如果某个区域的存储空间用尽,则服务器将向所有其他请求返回错误503(服务暂时不可用)。

那好吧。 但是这对练习意味着什么呢? 这是什么时候发生的? 谁收到这些503s? 这是否意味着,如果与connzone相关联的IP数量达到16000,每个人都得到503,这一切都结束了? Nginx是如何决定的? 这个文件很古怪。

所以,考虑到configuration的例子,谁会得到一个503,在哪些情况下,事情会如何呢? 与请求区域一样 ?

实践? 您可以控制连接到服务器的IP的总量。

什么时候? 那么,如果区域已满。

谁? 是的,只要区域已满,不在区域内的所有人。

如果您使用的是64位系统,并将区域设置为1M,则nginx可以存储多达16,000个IP。 这意味着,如果必须存储16,001个IP,则+1用户将收到第一个503错误。 如果B树满了,拒绝决定是相当容易的。

您可以通过阅读模块的源代码来find具体的实现: https : //github.com/git-mirror/nginx/blob/master/src/http/modules/ngx_http_limit_conn_module.c

请求区域工作非常相似。

引自http://forum.nginx.org/read.php?2,233709,233722#msg-233​​722

服务器将能够跟踪〜16k不同的客户端IP地址的连接数量。 如果碰巧拥有那么多的活动客户端,则来自其IP尚不知道的客户端的下一次连接尝试将尝试创build新的状态,这将失败,因为区域被耗尽并且客户端将被返回503。

所以如果连接数量减less到16000以下(或者无论什么限制),未来的连接将不会得到503。