动态域名解析说明
参考如下配置
server {
location / {
proxy_pass https://www.baidu.com;
}
}
当不使用动态域名解析时,THS只在启动的时候调用gethostbyname函数对www.baidu.com进行解析,在运行中www.baidu.com 域名和ip解析发生变化后,THS无法感知到,要想THS拿到最新映射只能重启THS。
gethostbyname 是可以解析 /etc/hosts 里面的映射关系的。为了在THS运行过程中也能解析域名,需要使用域名解析指令 resolver
resolver 指令说明
resolver address … [valid=time] [ipv4=on|off] [ipv6=on|off] [status_zone=zone];
address
为域名解析服务器地址,如114.114.114.114,8.8.8.8
ipv6
是否解析ipv6地址,建议关闭,较多的项目不支持ipv6。
status_zone
存储解析统计的zone,配置后可通过restful接口拿到解析统计指标。【6.0.1.x支持】
配置示例
步骤1: 设置DNS解析配置
http {
resolver 114.114.114.114 valid=10s ipv6=off status_zone=test_dnszone;
}
步骤2:配置解析
情况1:location中解析域名(所有版本均支持)
正向代理
location / {
proxy_pass $scheme://$host$request_uri;
}
$host 根据要请求的域名做代理,THS启动时是不知道有哪些域名的,所以需要使用resolver指令来做动态解析。
反向代理
如业务中的支付接口可能会代理微信,而微信也是域名也是变化的,请注意set $weixinapi api.weixin.qq.com;
set $weixinapi api.weixin.qq.com;
location /pay {
proxy_pass https://$weixinapi;
}
情况2 upstream中配置域名解析(601x开始支持)
在location中配置域名解析会舍弃主动健康检查的功能,也不能使用后端长连接的功能,所以某些情况在upstream中配置域名解析较好,并且节能通过监控restful接口看见upstream中域名的实时变化。
http {
resolver 114.114.114.114 valid=10s ipv6=off status_zone=test_dnszone;
upstream backend {
zone backend_zone 1m;
server api.weixin.qq.com:443 resolve;
}
server {
listen 8080;
location /pay {
proxy_pass https://backend
}
}
}
统计
通过监控接口获得指标:
curl http://ip:49151/thsapi/resolvers/
{
"queries": {
"name":243,
"srv":2,
"addr":0
},
"responses": {
"success":342,
"timedout":1,
"format_error":0,
"server_failure":1,
"not_found":1,
"unimplemented":0,
"refused":1,
"other":0
}
}
控制台统计指标