用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-233722
服务器将能够跟踪〜16k不同的客户端IP地址的连接数量。 如果碰巧拥有那么多的活动客户端,则来自其IP尚不知道的客户端的下一次连接尝试将尝试创build新的状态,这将失败,因为区域被耗尽并且客户端将被返回503。
所以如果连接数量减less到16000以下(或者无论什么限制),未来的连接将不会得到503。