一? ? ?问题的背景
①? ? 问题一
+++++++++++++++++"分割线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的握手过程
|