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 正确设定随机生成器。

使用代码示例:

  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. }