Skip to content

Latest commit

 

History

History
50 lines (39 loc) · 1.86 KB

main.md

File metadata and controls

50 lines (39 loc) · 1.86 KB

LuaRestyDNSLibrary 简介

这个 Lua 库提供了 ngx_lua 模块的 DNS 解析器:lua-resty-dns

该库基于 ngx_lua 的 cosocket API 实现,可以确定是 100% 非阻塞的。请注意,该模块至少需要 ngx_lua 0.5.12 或 OpenResty 1.2.1.11 版本。

此外,Lua Bit 库也是需要的。 如果你的 ngx_lua 绑定的 LuaJIT 的版本是 2.0,就已经默认开启了 Lua Bit 模块。请注意,这个模块在 OpenResty 集成环境中默认是开启的。

重要提示:为了能够生成唯一的 ID,在使用此模块之前,必须使用 math.randomseed 正确设定随机生成器。

使用代码示例:

lua_package_path "/path/to/lua-resty-dns/lib/?.lua;;";

server {
    location = /dns {
        content_by_lua_block {
            local resolver = require("resty.dns.resolver")
            local r, err = resolver:new{
                nameservers = {"8.8.8.8", {"8.8.4.4", 53} },
                retrans = 5,     -- 5 retransmissions on receive timeout
                timeout = 2000,  -- 2 sec
            }

            if not r then
                ngx.say("failed to instantiate the resolver: ", err)
                return
            end

            local answers, err = r:query("www.google.com")
            if not answers then
                ngx.say("failed to query the DNS server: ", err)
                return
            end

            if answers.errcode then
                ngx.say("server returned error code: ", answers.errcode,
                        ": ", answers.errstr)
            end

            for i, ans in ipairs(answers) do
                ngx.say(ans.name, " ", ans.address or ans.cname,
                        " type:", ans.type, " class:", ans.class,
                        " ttl:", ans.ttl)
            end
        }
    }
}