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來標識查詢結束,用來釋放資源。