Nginx(十八):DNS模块

本文详细介绍了Nginx的DNS解析流程,包括请求阶段、DNS响应处理、上下文回调及超时管理。在请求阶段,Nginx分配ctx结构体并发送DNS请求。当收到DNS响应时,解析结果被保存并回调给等待的上下文。超时管理确保了在没有响应或DNS重传失败时的正确处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

一、请求阶段
  1. ngx_resolve_start
    (1)分配ctx结构体;
    (2)赋值DNS结束后的回调函数。
  2. ngx_resolve_name->ngx_resolve_name_locked
    • 如果该域名在resolver中已存在节点:
      a.如果该节点仍有效,则更新node超时时间,将resolver中的DNS解析结果赋值给ctx,调用ctx的回调;
      b.如果该节点已失效。若因DNS响应还未返回(rn->waiting),则将该cxt挂至rn->waiting;若因响应后失效,则重新发起DNS请求(即2的流程)。
    • 如果该域名在resolver中不存在节点:
      a.分配并初始化rn节点,加入resolver红黑树;
      b.建立DNS请求字符串(rn->query);
      c.发送DNS请求(ngx_resolver_send_query);
      d.使能ctx->event超时定时器,用于ctx超时;
      e.将rn加入resolver的resend_queue队列,用于DNS的超时重传。如果这是resend_queue中的首个元素,则需要使能r->event重传定时器。该定时器超时时,会遍历resolver的resend_queue,对所有需要重传的node
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值