前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 缓存服务器(番外)动态 upstream

Nginx 缓存服务器(番外)动态 upstream

作者头像
用户1560186
发布2019-11-19 20:57:55
2.6K0
发布2019-11-19 20:57:55
举报
文章被收录于专栏:运维录运维录


在更新应用镜像(图中的App1)版本后,部分静态资源抛出HTTP 502状态码。先来看下 nginx缓存服务器日志,重点在"Host is unreachable"这段信息,顺着这个错误信息最终找到了错误源头,也有了本篇文章。

2019/06/18 09:46:15 [error] 11#11: *2926 connect() failed (113: Host is unreachable) while connecting to upstream, client: 10.42.0.101, server: localhost, request: "GET /css/pc/layout.css?v= HTTP/1.1", upstream: "http://10.42.200.140:8080/css/pc/layout.css?v=", host: "zongming.net", referrer: "https://zongming.net/"


为了讲清楚问题原因,这里需要说明下项目运行环境,这个WEB项目运行在 Rancher容器平台上,项目架构如图(参考 nginx 缓存服务器(上))。

项目基于Docker容器技术,通过CI(持续集成)工具将代码(war包)附加到Tomcat Docker镜像上,最后整个项目(App1)更新上线是通过升级镜像版本完成的。


1. 接下来开始排查问题,首先通过检查nginx配置文件,发现配置文件中 upstream使用的是主机名(demo-web rancher内部域名)而非ip地址。

2. 其次通过检查日志发现,日志中的 upstream服务器IP 10.42.200.140 与现有的 upstream服务器IP并不相同,说明 upstream服务器运行期间IP地址发生了改变,这也是日志中"Host is unreachable"问题所在。

3. Nginx DNS缓存机制 最后说下nginx dns缓存机制,默认情况下nginx的Resolver没有配置,nginx将使用首次DNS查询获得的IP地址,之后将不会再查询DNS直到下一次重新加载配置(比如nginx -t),所以如果一条DNS记录解析在DNS缓存期内变更,那么由于nginx DNS缓存机制的存在nginx仍会使用旧的IP地址。

综上也就是说配置文件中所使用的demo-web主机名在 nginx缓存服务器运行期间IP地址发生了改变,nginx缓存服务器无法与upstream服务器 demo-web通信,最终导致了502 问题


知道了病因那么给出的药方就是使用动态的 upstream,主动定期对主机名进行DNS解析,也就是使用 resolver指令 ,配置文件如下:

resolver 表示指定的DNS 169.254.169.250,注意这是rancher环境内部DNS地址。 valid=8s 表示覆盖默认TTL(DNS缓存时间),指定TTL为8秒(每8秒查询一次DNS)。 ipv6=off 表示关闭 IPV6 解析。 set 设置变量,并在proxy_pass指令中使用这个变量。


至此通过为 nginx设置动态 upstream,解决了因镜像升级容器IP变更而导致的nginx缓存服务器 502故障,本期就到这里下期再见。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档