Nginx 反向代理,DNS 缓存导致偶尔访问超时

问题描述

当我们通过 nginx 配置代理访问一个静态域名时,其默认只会在启动时做 dns lookup 然后把域名映射的具体 IP 缓存下来,

从此之后,如果我们不做 restart 或者 reload,域名所映射的 IP 都是不会变的,哪怕这个 IP 已经失效。如下图所示:

proxy_pass https://open.feishu.cn;

我们最近通过 nginx 搭建代理访问飞书公共API服务的时候就被这个坑到了:飞书域名背后的 IP 是动态的,而且隔一段时间某些 IP 就会失效。这就导致我们的代理服务,隔一段时间就会访问飞书失败。直接阻塞了我们的服务。

解决办法

以变量的方式定义要转发的域名:

resolver 1.1.1.1 2.2.2.2

set $feishu "open.feishu.cn;"

proxy_pass https://$feishu;

当把代理域名设置成变量后,我们需要手动定义 resolver 即 dns 解析服务地址。

Linux 服务器上的 DNS 服务地址可以通过以下命令获取:

cat /etc/resolv.conf

resolver 配置多个 DNS 服务地址时,IP 用空格隔开。

More

通过变量的方式配置后,Nginx 也并不会每次访问都做 DNS lookup,默认是缓存 5min(该时间来源于论坛,并为实际验证)。

通过 resolver 配置内的 valid 可以自定义 DNS 缓存的超时时间(建议不要太短):

resolver 1.1.1.1 2.2.2.2 valid=3600s

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容