ngx_http_limit_conn_handler中当连接数r->conn超出限制数r->limit_conn时,对当前连接调用
ngx_http_limit_conn_cleanup_all操作,然后返回503错误
这个函数代码如下:
static ngx_inline void
ngx_http_limit_conn_cleanup_all(ngx_pool_t *pool)
{
ngx_pool_cleanup_t *cln;
cln = pool->cleanup;
while (cln && cln->handler == ngx_http_limit_conn_cleanup) {
ngx_http_limit_conn_cleanup(cln->data);
cln = cln->next;
}
pool->cleanup = cln;
}
可以看出就做了调用ngx_http_limit_conn_cleanup清除当前连接在共享内存中的资源(可是此时当前连接的r->pool里没有
设置一个指针指向ngx_http_limit_conn_cleanup,while的条件不能成立)
ngx_http_limit_conn_handler的逻辑是下面这样的
========================
if ( 超出连接数 )
{
清理 ;此处还没有到挂载清理函数的位置
return 503;
}
挂载清理函数 ;这个地方才挂载了一个清理的函数
========================
我认为ngx_http_limit_conn_cleanup_all这个函数不要也行啊,请教各位。
希望上面的描述还算清楚,各位费心帮看看