Nginx

Nginx,第1张

一     问题的背景

①    问题一

+++++++++++++++++"分割线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的握手过程

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/886943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存