我们可以直接在 nginx 的配置文件中使用 resolver 指令直接设置使用的 nameserver 地址。
官方文档中是这么描述的
Syntax: resolver address … [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location
一个简单的例子
resolver 8.8.8.8 114.114.114.114 valid=3600s;
不过这样的问题在于nameserver被写死在配置文件中,如果使用场景比较复杂或有内部dns服务时维护比较麻烦。
我这边把解析的结果放入了lrucache缓存了5分钟,你们同样可以把结果放入shared中来减少worker查询次数。
还有些同学可能会在hosts文件中自定义域名和ip,这时候resolve是无法正常解析的。
这个时候可以借助dnsmasq这个服务来缓存我们的dns结果,而且hosts文件中的定义可以被该服务识别。
需要在nginx的配置文件中,设置resolver为dnsmasq服务的监听地址即可。
https://hambut.com/2016/09/09/how-to-resolve-the-domain-name-in-openresty/
http://www.dpdk.eu/
https://github.com/keplerproject/luacov