nginx的域名解析


1、​创建域名解析结构:

 ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)

这里面的names是dns服务器的地址,n是dns服务器地址的个数, 此函数调用后,会形成本机到dns服务器的upd连接结构,值得说明的是,如果names传入NULL,n传入0,也是可以获取到默认的dns地址的,所以一个经典的用法是创建一个http的配置块,在配置解析的时候指定dns服务器的地址,同时在配置结束后使用ngx_resolver_create(cf, NULL, 0),这样即使没有配置dns服务器的地址也能用默认的地址进行解析。

2、域名解析流程:

ngx_resolve_start 如果是ipv4地址,这里直接设置quick标记位,后面处理会直接调用回调函数。

设置解析后的回调处理函数handler、超时时间、回调传递数据等。

ngx_resolve_name 进行域名解析,如果quick已经被置位则调用回掉函数,否则调用ngx_resolve_name_locked,里面先查询红黑树中的缓存,没有的话,建立红黑树结点,作为下一次查询的缓存,发送解析请求到服务器,有了请求结果后调用回掉函数处理请求。
 
3、解析后的回调处理函数
ctx->addrs,ctx->naddrs 为解析后的地址列表
注意:在handler中都需要调用ngx_resolve_addr_done来标识查询结束,用来释放资源。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM