我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

原文链接:

%E6%8A%80%E6%9C%AF/2020/05/17/nginx--dns---/

问题描述

继续上一篇文章中提到的Nginx解析域名地址的问题,可以用一句话来描述:“如果配置了域名地址,Nginx在启动时只会连接域名服务器解析一次域名” //,并缓存解析结果,不会根据解析结果的TTL自动更新。如果域名地址配置了多个IP并且仍在动态变化,Nginx会将请求转发到过期的IP地址。连接超时错误日志类似这样:

[error] 20472#0: *455027 upstream timed out (110: Connection timed out) while connecting to upstream, client: 192.168.1.10, server: localhost, request: "GET /xxx/xxx HTTP/1.1", upstream: "http://103.95.221.193:80/xxx/xxx", host: "192.168.1.11:12345"

这个说法在2016年的官方博客中曾提到过:

另外,除了网上一些分析源码的文章外,没有发现其他官方文档提及这个细节。

问题解决1.使用负载均衡算法和失败次数的设置

upstream backends {
    least_conn;
    server backends.example.com:8080 max_fails=3;
}
server {
    location / {
        proxy_pass http://backends;
    }
}

您可以在 中对上游服务器进行更详细的设置。为了解决DNS缓存问题,可以在例如中指定所需的负载均衡算法,指定在N次调用失败后判断服务异常,暂停转发服务。

笔记:

这个配置的例子在官方博客中有。当我看到这个配置时,我感觉有点奇怪。我自己进行了模拟测试。测试计划是在hosts文件中配置一个模拟域名和三个IP地址。其中两个 IP 地址是正确的。是的,另一个是内网不存在的IP。测试结果是Nginx总是将请求转发到错误的IP。您始终可以在日志中看到超时错误。配置好像没有效果(还有额外的配置,也尝试过配置,并尝试)

我不知道hosts配置方式是否会不可避免的出现这种情况,因为目前还没有条件去测试我真正想要的场景,所以我不敢说博客中的配置是错误的【如果碰巧以后有条件测试验证,会回来更新

我在刚学习Nginx的时候测试过这个配置。当时里面配置的所有上游服务都是一些IP地址。再次通过IP地址进行测试,配置2个正确的IP地址和1个错误的IP地址,发现这样的配置可以生效。一定次数的失败后(实际失败次数比设定的次数多,不知道原因),Nginx在时间内将不再将请求转发到错误的IP

2. 定义和设置变量

resolver 10.0.0.2 valid=10s;
resolver_timeout 5s;
server {
    location / {
        set $backend_servers backends.example.com;
        proxy_pass http://$backend_servers:8080;
    }
}

详细配置可以参见官方文档。示例配置指定DNS服务器10.0.0.2,指定DNS解析的有效时间为10秒。根据博客《Nginx动态解析域名》中博主的测试,并不意味着Nginx会自己重新调整DNS解析,只有在有请求转发时才检查有效期是否过期它。

当不配置valid选项时,Nginx V1.1.9之后默认在DNS解析结果中使用TTL。

在中使用变量的作用是当TTL过期时可以再次调用DNS解析,从而解决总是使用缓存结果的问题。

这可能是官方原版中唯一针对DNS缓存的解决方案。它带来的缺点正如《Nginx域名动态解析》博主提到的。您不能使用特定于模块的配置。

Nginx Plus版本有更好的配置来解决这些问题。另外,使用Lua插件也可能会更完美地解决这个问题。暂时没有这方面的研究。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/7294.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线