一 问题背景
① 问题一
+++++++++++++++++"分割线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的域名解析
③ 引申
场景: 利用'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方式
细节点:
1) 修改'proxy_pass'后,'reload'没有生效
2) 观察:'ps -ef | grep nginx' 进程'启动时间'
2)restart方式
++++++++++++++ "必须restart场景" ++++++++++++++
1. 需要'修改'limit_req参数,必须'restart'下nginx的进程,不然会因为'内存释放不了'导致不生效
背景: 添加nginx'透传源ip'的策略时
2. 缓存'清理'的问题,例如'proxy_pass'域名解析缓存问题
③ 方式2:通过upstream组使用域名
④ 方式3:proxy_pass使用变量
备注:这三种方式,算是'递进'关系
细节点:只要'proxy_pass'后边涉及'变量','可能变量包含域名、或者变量是url参数[但是涉及域名]',都是下面的'情况'
例外: set $forward "https://upstream_id"; proxy_pass ${forward}; -->"这种不涉及域名解析"
根因:使用 'resolver 语法'来解决 'DNS 缓存'的问题
补充:'不配置 valid 选项'时,V1.1.9 之后的 Nginx 默认会使用 'DNS 解析结果中'的 TTL
二 告警指标补充
增加一个'告警'指标:
定时检测nginx某些proxy_pass的'对应域名[非变量]'的初始解析值与'后续探测值',是否发生变化
思考:nginx -t -->能检验'哪些'问题? -->'证书问题?'
三 参考链接