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来标识查询结束,用来释放资源。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券