Docker 部署 Nginx 出现「host not found in upstream」问题解决
目录
问题
这个问题是本人在折腾自己的良心云(凉心云)的时候发现的,当时是想使用一个前置 Nginx 转发所有的请求,同时进行日志的记录等等。
当我写完配置文件,测试时没有任何问题。但是当我关闭了自己搭建的 es 服务,我发现我访问所有的服务都 500 了,这时我查看 nginx error 日志,记录如下
|
|
解决
在 nginx 的配置文件中添加以下内容
|
|
原理
nginx 启动时,会对其配置的 upstream 进行 DNS 解析测试,如果无法解析成功则会报错无法启动。
但是,当我们将 upstream 修改为变量时,nginx 不会进行测试,以此绕过这个问题。
resolver 则为 Nginx 设置 DNS 服务器,Nginx会动态利用 resolver 设置的DNS服务器(本机设置的 DNS 服务器或 /etc/hosts 无效),将域名解析成 IP,proxy 模块会将请求转发到解析后的IP上。
如果不添加的话,访问将会502 Bad Gateway
,同时日志会显示
|
|