如何在openresty里解析域名
转:原文:http://hambut.com/2016/09/09/how-to-resolve-the-domain-name-in-openresty/?utm_source=tuicool&utm_medium=referral
为什么我们的域名不能被解析
最近经常有朋友在使用一个域名地址时发现无法被正确解析
比如在使用Mysql实例时某些云会给一个私有的域名搭配自有的nameserver使用
1 |
local client = mysql:new() |
以上代码在直接使用时往往会报一个无法解析的错误。那么怎么在openresty中使用域名呢
搭配 resolver 指令
我们可以直接在 nginx 的配置文件中使用 resolver 指令直接设置使用的 nameserver 地址。
官方文档中是这么描述的
1 |
Syntax: resolver address ... [valid=time] [ipv6=on|off]; |
一个简单的例子
1 |
resolver 8.8.8.8 114.114.114.114 valid=3600s; |
不过这样的问题在于nameserver被写死在配置文件中,如果使用场景比较复杂或有内部dns服务时维护比较麻烦。
进阶玩法
我们的代码常常运行在各种云上,为了减少维护成本,我采用了动态读取本机/etc/resolv.conf的方法来做。
废话不说,让我们一睹为快。
1 |
local pcall = pcall |
通过上述代码我们成功动态拿到了一组nameserver的地址,下面就可以通过resty.dns.resolver大杀四方了
1 |
local require = require |
我这边把解析的结果放入了lrucache缓存了5分钟,你们同样可以把结果放入shared中来减少worker查询次数。
高阶玩法
现在我们已经实现了自缓存体系的dns查询,如果搭配resty.http就会达到更好的效果。
一个简单的例子是,通过解析uri得到hostname、port、path,把hostname扔给自缓存dns获取结果
发起request请求,addr + port connect 之,设置header的host为hostname, path等值来实现ip直接访问等高阶用法。
这里就不过多的阐述了。
最终的演示例子如下
1 |
local client = mysql:new() |
如何使用 /etc/hosts 自定义域名
还有些同学可能会在hosts文件中自定义域名和ip,这时候resolve是无法正常解析的。
这个时候可以借助dnsmasq这个服务来缓存我们的dns结果,而且hosts文件中的定义可以被该服务识别。
需要在nginx的配置文件中,设置resolver为dnsmasq服务的监听地址即可。
如何在openresty里解析域名的更多相关文章
- 启动phpstyle Apache的80端口被win7的System PID=4的进程占用的解决方法 以及 如何在phpStyle里发布程序
学习前端是,用到Ajax,php语言,操作mysql数据库,浏览器无法解析php代码(把源码输出):原因,我之前用的是tomcat服务器写jsp,servlet,php用的是apache服务器,没有配 ...
- 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...
- python解析域名
#coding:utf-8 import socket def URL2IP(): for oneurl in urllist.readlines(): url=str(oneurl.strip()) ...
- Linux下解析域名命令-dig 命令使用详解
Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息.dig 命令主要用来从 DNS 域名服务器查询主机地址信息.dig的全称是 (dom ...
- DNS解析域名的过程
一.DNS解析域名的过程 1.大的过程可分为三步: (1).在缓存中查找是否之前解析过 (2).在windows系统的host文件中查找 (3).请求DNS服务器 2.小的过程可分为十步: (1).浏 ...
- 使用adns库解析域名
1. adns.adns-python库简介 adns库是一个可进行异步非阻塞解析域名的库,主要使用C语言编写,在linux平台下运行.使用adns库进行域名解析效率非常,著名的开源网络爬虫larbi ...
- linux服务器wget无法成功解析域名及程序获取外网数据不稳定问题
1.问题描述: 1.1 最近发现通过linux服务器wget下载远程文件经常提示无法解析域名问题,要重复多次才能成功,成功率比较低. 1.2 PHP用file_get_contents()函数获取淘宝 ...
- 如何在BIOS里设置定时关机?
如何在BIOS里设置定时关机? 通过CMOS设置实现定时开机的设置过程如下: 首先进入"CMOS SETUP"程序(大多数主板是在计算机启动时按DEL键进入): 然后将光条移到&q ...
- SpringBoot之解决云服务器VPS在所处云端集群的内网不能解析域名的问题:java.net.UnknownHostException:abc.cn: Temporary failure in name resolution
一.起因与原因分析过程 前端小伙伴儿告诉我,说服务器崩了. 请求数据接口,接口有响应,但报的json提示指向:数据库异常错误. 遂登陆云主机查看日志,核心记录显示如下: 2018-11-09 22:1 ...
随机推荐
- S5PV210_时钟系统
1.S5PV210的时钟获得:外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频 S5PV210外部有4个W晶振接口,可以根据需要来决定在哪里接晶振.接了晶振之后上电相应的模块就能产生振 ...
- Quartz实现任务调度
一.任务调度概述 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发. ...
- iOS 解决LaunchScreen中图片加载黑屏问题
iOS 解决LaunchScreen中图片加载黑屏问题 原文: http://blog.csdn.net/chengkaizone/article/details/50478045 iOS 解决Lau ...
- [LeetCode] Word Pattern 词语模式
Given a pattern and a string str, find if str follows the same pattern. Examples: pattern = "ab ...
- [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...
- [LeetCode] Merge Two Sorted Lists 混合插入有序链表
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- 【swift学习笔记】四.swift使用Alamofire和swiftyJson
Alamofire是AFNetworking的swift版本,功能灰常强大. github:https://github.com/Alamofire/Alamofire SwiftyJSON是操作js ...
- Linux CGroup之freezer分析与应用
Linux Kernel:4.4.17 CGroup的freezer子系统对于成批作业管理系统很有用,可以成批启动/停止任务,以达到及其资源的调度. freezer子系统也有助于针对运行一组任务设置检 ...
- CoreOS和Docker入门
转载自: http://www.oschina.net/translate/coreos_and_docker_first_steps?cmp CoreOS是一个基于Linux,systemd和Doc ...
- DataTable转List
Invoke : DataTableToList<City>.ConvertToModel(ds.Tables[0]).ToList<City>(); using System ...