一、参数解释
可以理解为 nginx 通过 proxy_pass 指令访问其他服务时(其他服务为域名的方式)。nginx会请求 resolver 中配置的 dns 地址,获得 upstream 服务中的 IP 后再继续访问第三方服务。
语法:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location
Configures name servers used to resolve names of upstream servers into addresses, for example:
示例:
resolver 8.8.8.8;
set $upstream_host "https://ww.baidu.com";
location /v2 {
proxy_pass $upstream_host;
}
注意proxy_pass 中的域名 $upstream_host,并不是每次请求都会解析这个域名的ip,所以当 $upstream_host 的 ip 出现变动时,服务无法访问。
解决:
注意 resolver 语法中有一个 valid 值,该值是指 nginx 记录 $upstream_host 的 dns 解析缓存时间(单位/秒),默认时间取决于 dns 记录的 ttl 值。那么可以根据项目情况制定这个缓存时间。
示例:
http {
resolver 202.102.134.68 114.114.114.114 valid=60 ipv6=off;
location ~/bridge/v1 {
set $upstream_host $http_upstream_host;
proxy_pass http://$upstream_host;
}
}