小狗的名字叫朗普 發表於 2019-7-19 14:26:00

nginx的域名解析

<p class="p1"><strong>1、​创建域名解析结构:</strong></p>
<p class="p1">&nbsp;<span class="Apple-converted-space">ngx_resolver_create<span class="s1">(ngx_conf_t *cf<span class="s1">,&nbsp;ngx_str_t *names<span class="s1">,&nbsp;ngx_uint_t n<span class="s1">)</span></span></span></span></span></p>
<p class="p1">这里面的names是dns服务器的地址,n是dns服务器地址的个数,&nbsp;此函数调用后,会形成本机到dns服务器的upd连接结构,值得说明的是,如果names传入NULL,n传入0,也是可以获取到默认的dns地址的,所以一个经典的用法是创建一个http的配置块,在配置解析的时候指定dns服务器的地址,同时在配置结束后使用ngx_resolver_create<span class="s1">(cf<span class="s1">,&nbsp;NULL,&nbsp;0<span class="s1">),这样即使没有配置dns服务器的地址也能用默认的地址进行解析。</span></span></span></p>
<p class="p1"><strong>2、域名解析流程:</strong></p>
<p class="p1">ngx_resolve_start&nbsp;<span class="s1">如果是ipv4<span class="s1">地址,这里直接设置<span class="s2">quick标记位,后面处理会直接调用回调函数。</span></span></span></p>
<p class="p1">设置解析后的回调处理函数<span class="s2">handler、超时时间、回调传递数据等。</span></p>
<div>ngx_resolve_name<span class="s1">进行域名解析,如果quick<span class="s1">已经被置位则调用回掉函数,<span class="s1">否则调用ngx_resolve_name_locked<span class="s1">,里面先查询红黑树中的缓存,没有的话,建立红黑树结点,作为下一次查询的缓存,发送解析请求到服务器,有了请求结果后调用回掉函数处理请求。</span></span></span></span></div>
<div>&nbsp;</div>
<div><strong>3、解析后的回调处理函数</strong></div>
<div>ctx-&gt;addrs,ctx-&gt;naddrs 为解析后的地址列表</div>
<div><span class="s3">注意:在<strong>handler</strong><span class="s3">中都需要调用<strong>ngx_resolve_addr_done</strong><span class="s3">来标识查询结束,用来释放资源。</span></span></span></div><br><br>
来源:https://www.cnblogs.com/bewolf/p/11213063.html
頁: [1]
查看完整版本: nginx的域名解析