一 问题的背景
① 问题一
+++++++++++++++++"分割线1"+++++++++++++++++
1. 同事1:晚上做'nginx正向代理'变更要出公网,变更前检测域名'无法解析'
2. 根因:同事0'白天做变更'的时候,不小心把'/etc/resolv.conf'中的ip由'公网ip'修改为'内网ip',但是当时'不感知';
ps: /etc/resolv.conf修改为'内网'只是影响解析,'不影响'网络的连通性['通过ip定位的']
3. 当时感到奇怪:'nginx'服务配置的'公网域名'竟然还能'正常'解析,'对外'提供服务
② 问题二
+++++++++++++++++"分割线2"+++++++++++++++++
1. *** 作:同事修改nginx 对应server块的'server_name'对应的'DNS'解析记录
2. 预期:只需要'更改' DNS 解析到'新的 ip' 就能'完成'切换,压根'不需要'对nginx服务进行 *** 作
3. 现象:更改 DNS 解析后,走 nginx 怎么'也访问不了'后端,而在 nginx 机器上直接 'curl 后端'是没有问题的.
细节点:发现'被 hang 住'
error.log报错: [error] 20472#0: *455027 upstream timed out (110: Connection timed out) while connecting to upstream
CDN问题
二 根因
① 官网给的解读
'细节点':curl'手动'测试和nginx'代理转发测试'是完全'不同'的两个效果
备注:为了'避免'搭建dns服务器,可以通过'/etc/hosts'本地解析临时添加'域名和ip'
② 方式1:通过proxy_pass指令使用域名系统
思考:proxy_pass怎么能'区分后面'是'域名'还是'upstream_name'?
规则:先找是否有对应的'upstream_name',如果无法识别则尝试dns'解析'
特点: 域名在'reload、start、reload'时必须能'解析'
附加:如果proxy_pass不涉及'域名',全都是ip,'不涉及本章'的问题了
③ 方式2:通过upstream组使用域名
④ 方式3:proxy_pass使用变量
备注:这三种方式,算是'递进'关系
细节点:只要'proxy_pass'后边涉及'变量','不一定是域名,可能是url携带参数',都是下面的'情况'
根因:使用 'resolver 语法'来解决 'DNS 缓存'的问题
补充:'不配置 valid 选项'时,V1.1.9 之后的 Nginx 默认会使用 'DNS 解析结果中'的 TTL
辅助参考
no resolver defined报错
二 告警指标补充
增加一个'告警'指标:检测nginx某些proxy_pass的'对应域名[非变量]'的初始解析值与'后续探测值','定时检测'是否发生变化
思考:nginx -t -->能检验哪些问题?-->'证书问题?'
三 参考连接
Nginx 代理域名地址时的 DNS 缓存问题
nginx的dns缓存问题
Nginx缓存了DNS解析造成后端不通
参考博客
最佳实践
https的握手过程
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)