Nginx(二十三)nginx的dns缓存问题 |
您所在的位置:网站首页 › linux设置dns缓存时间 › Nginx(二十三)nginx的dns缓存问题 |
一 问题背景 ① 问题一 +++++++++++++++++"分割线1"+++++++++++++++++ 1. 同事1:晚上做'nginx正向代理'变更要出公网,变更前'检测'公网域名'无法解析' 2. 根因: 1) 同事0'白天做变更'的时候 --> '错误的认为变更级别低,风险小,而批量进行变更' 2) 不小心把'/etc/resolv.conf'中的ip由'公网ip'修改为'内网ip' --> '操作' 3) 但是当时'不感知' --> '没有考虑影响面' ps: /etc/resolv.conf修改为'内网'只是影响解析,'不影响'网络的连通性['通过ip定位的'] 3. 当时感到奇怪:'nginx'服务配置的'公网域名'竟然还能'正常'解析,'对外'提供服务② 问题二 +++++++++++++++++"分割线2"+++++++++++++++++ 1. 操作:同事修改nginx 对应server块的'server_name'对应的'DNS'解析记录 2. 预期:只需要'更改' DNS 解析到'新的 ip' 就能'完成'切换,压根'不需要'对nginx服务进行操作 3. 现象: 1) 更改 DNS 解析后 --> "操作" 2) 通过 nginx转发后 怎么'也访问不了'后端 --> "现象" 3) 而在 nginx 机器上直接 'curl 后端'是没有问题的 --> "对比" 细节点: 发现'被 hang 住 (超时)',超时才'退出' 4. 排错的'观察'点 1) 通过'upstream_addr'或者'error.log'错误日志,可以看到解析的'ip' error.log'报错': upstream timed out (110: Connection timed out) while connecting to upstream 2) 强调:nginx'当前转发'请求使用的域名'解析值',而'不是'ping的域名解析CDN问题 ③ 引申 场景: 利用'proxy_pass' 域名多个A记录 做'容灾',不管是'region'还是'az'级别 事项: 一定要通过'resolver 设置多个server'并通过'变量'形式保存域名,最后proxy_paas使用变量 优点: 避免'非变量'时nginx域名'解析值'常驻内存,failover故障切换时,nginx不'reload'无感知二 根因 ① 官网给的解读 '细节点':curl'手动'测试和nginx'代理转发测试'是完全'不同'的两个效果 备注:为了'避免'搭建dns服务器,可以通过'/etc/hosts'本地解析临时添加'域名和ip'② 方式1:通过proxy_pass指令使用裸域名 思考:proxy_pass怎么能'区分后面'是'域名'还是'upstream_name'? 规则:先找是否有对应的'upstream_name',如果'无法识别'则尝试dns'解析' 特点:域名在'restart、start'时必须能'解析' -->不能解析,nginx'进程起不来' -- 细节点:如果'reload',进程'不会'报错,但是'error.log'会记录 附加:如果proxy_pass不涉及'域名',全都是ip,'不涉及本章'的问题了1)reload方式 reload不生效的原因 2)restart方式 ③ 方式2:通过upstream组使用域名 ④ 方式3:proxy_pass使用变量 辅助参考 no resolver defined报错 二 告警指标补充 增加一个'告警'指标: 定时检测nginx某些proxy_pass的'对应域名[非变量]'的初始解析值与'后续探测值',是否发生变化 思考:nginx -t -->能检验'哪些'问题? -->'证书问题?'三 参考链接 Nginx 代理域名地址时的 DNS 缓存问题 nginx的dns缓存问题 Nginx缓存了DNS解析造成后端不通 参考博客 最佳实践 https的握手过程 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |