OpenResty域名解析之dnsmasq服务配置
OpenResty使用lua_resty_http模块时,直接使用IP地址连接正常,但有时用指定域名配置时,日志会提示如下错误:
failed to request: xxx.com could not be resolved (5: Operation refused)
原因分析:OpenResty使用的是Nginx的resolver,不直接读取/etc/hosts里面的域名配置,也不走/etc/resolver指定的解析服务器
解决办法:可以部署dnsmasq自建一个小型DNS
- 安装dnsmasq
apt -y install dnsmasq
- 配置dnsmasq
# /etc/resolv.conf存放的是系统的dns,resolv-file表示根据系统dns列表读取 resolv-file=/etc/resolv.conf # resolv.conf内的DNS寻址严格按照从上到下顺序执行,直到成功为止 strict-order # DNS解析hosts时对应的hosts文件,对应no-hosts,填写本地读取的/etc/hosts域名 addn-hosts=/etc/hosts cache-size=1024 # 多个IP用逗号分隔,192.168.x.x表示本机的ip地址,只有127.0.0.1的时候表示只有本机可以访问。 # 通过这个设置就可以实现同一局域网内的设备,通过把网络DNS设置为本机IP从而实现局域网范围内的DNS泛解析(注:无效IP有可能导至服务无法启动) listen-address=192.168.x.x,127.0.0.1 # 配置域名 address=/xxx.com/127.0.0.1
sed -i "s/\#resolv-file=/resolv-file=\/etc\/resolv.conf/g" /etc/dnsmasq.conf sed -i "s/\#strict-order/strict-order/g" /etc/dnsmasq.conf sed -i "s/\#addn-hosts=\/etc\/banner_add_hosts/addn-hosts=\/etc\/hosts/g" /etc/dnsmasq.conf sed -i "s/\#listen-address=/listen-address=192.168.1.71,127.0.0.1/g" /etc/dnsmasq.conf sed -i "s/\#address=\/double-click.net/address=\/xxx.com/g" /etc/dnsmasq.conf sed -i "s/\#domain=thekelleys.org.uk/domain=xxx.com/g" /etc/dnsmasq.conf echo "cache-size=1024" >> /etc/dnsmasq.conf echo "server=114.114.114.114" >> /etc/dnsmasq.conf echo "server=8.8.8.8" >> /etc/dnsmasq.conf
- 启动dnsmasq
systemctl enable dnsmasq --now
注:启动失败可能是和系统systemd-resolved服务端口冲突,执行命令:systemctl disable systemd-resolved --now
错误提示如下图所示:

- nginx配置
/usr/local/openresty/nginx/nginx.conf配置文件中添加resolver,如下图所示:

征途漫漫,惟有奋斗!
浙公网安备 33010602011771号