• LuaRestyDNSLibrary 简介

    LuaRestyDNSLibrary 简介

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

    lua-resty-dns

    这个 Lua 库基于 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 集成环境中默认是开启的。

    使用代码示例:

    1. lua_package_path "/path/to/lua-resty-dns/lib/?.lua;;";
    2. server {
    3. location = /dns {
    4. content_by_lua_block {
    5. local resolver = require "resty.dns.resolver"
    6. local r, err = resolver:new{
    7. nameservers = {"8.8.8.8", {"8.8.4.4", 53} },
    8. retrans = 5, -- 5 retransmissions on receive timeout
    9. timeout = 2000, -- 2 sec
    10. }
    11. if not r then
    12. ngx.say("failed to instantiate the resolver: ", err)
    13. return
    14. end
    15. local answers, err = r:query("www.google.com")
    16. if not answers then
    17. ngx.say("failed to query the DNS server: ", err)
    18. return
    19. end
    20. if answers.errcode then
    21. ngx.say("server returned error code: ", answers.errcode,
    22. ": ", answers.errstr)
    23. end
    24. for i, ans in ipairs(answers) do
    25. ngx.say(ans.name, " ", ans.address or ans.cname,
    26. " type:", ans.type, " class:", ans.class,
    27. " ttl:", ans.ttl)
    28. end
    29. }
    30. }
    31. }