JAVA全系列 教程
3762个小节阅读:7091.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
TCP/IP协议使用IP地址来标识主机,但纯数字的地址很难记忆和使用,于是“域名”(Domain Name)应运而生,它代替了麻烦的数字串,使用易读的文字来标识主机。
例如,我要去西湖边的“外婆家”,这就是名称,然后通过地址簿。查看到底是那条路多少号。
Nginx自带了标准的域名解析功能,使用指令resolver在配置文件里指定DNS服务器,自动解析域名。
例如:
xxxxxxxxxx
resolver 8.8.8.8 8.8.4.4 valid=30s; #指定两个 DNS ,缓存 30 秒
223.5.5.5
223.6.6.6
但resolver指令的功能较简单,如果想要在OpenResty里更灵活地实现域名解析功能就要使用lua-resty-dns库,它基于 cosocket,完全无阻塞,是一个非常高效易用的DNS客户端。
lua-resty-dns 库需要显式加载后才能使用,即:
xxxxxxxxxx
local resolver = require "resty.dns.resolver" -- 加载 lua-resty-dns
在访问 DNS 服务器之前,我们必须调用口new 方法创建解析对象:
xxxxxxxxxx
r , err = resolver:new(opts) --创建 DNS 解析对象
new方法的参数opts是一个表有四个相关的字段
示例:
xxxxxxxxxx
local r, err = resolver:new{
nameservers={"8.8.8.8",{8.8.4.4,53},{4.2.2.1},"4,2,2,2"},timeout=1000
}
if not r then
ngx.say("failed to init resolver :" ,err)
end
有了解析对象后,就可以调用 query 方法向 DNS 服务器发送查询请求:
xxxxxxxxxx
answers, err= r:query(name) --查询域名对应的IP地址
xxxxxxxxxx
local answers,err = r:query("www.openresty.org")
if not answers then
ngx.say("failed to query:",err)
return
end
if answers.errcode then
ngx.say("error code:",answers.errcode,":",answers.errstr)
end
for _,rec in ipairs(answers ) do
ngx.say(rec.name, " ",rec.address,rec.ttl)
end