name_rbtree)
初始化重传和过期队列(r->name_resend_queue、r->name_expire_queue)
设置超时时间的handler(ngx_resolver_resend_handler...整个过程总结如下:
proxy_pass http://$host;
ngx_resolver_ctx_t ctx 每次域名解析都会生成这个结构体, 直接malloc,未使用r->pool.ctx =...(ctx)
• 如果 ctx->quick == 1, 直接调用 ctx->handler, 跳过dns解析.
• 否则调用 ngx_resolve_name_locked, 执行dns解析.
• ngx_resolve_name_locked...(r, ctx)
1 调用ngx_resolver_lookup_name查找域名节点rn是否在r->name_rbtree缓存节点中, 存在进入(2), 否者进入 (5)
2 判断rn->valid是否过期...,没有过期进入(3), 否者进入(4).
3 如果存在 rn->naddrs, 是A记录节点, 循环调用rn->waiting链表上的 ctx->handler, 然后函数返回OK; 如果不存在 rn-