PaRaD1SE

Docker Nginx:如何避免Host Not Found

发布时间: 2022/3/27 访问量: 17007

分类: 

开发

在使用Docker Nginx的时候如何避免“Host Not Found”错误,并让Nginx正常启动

问题描述

Docker容器中使用Nginx做反向代理的时候,有时候需要一个服务先启动,然后再构建另一个服务的镜像,此时如果在nginx conf里直接配置proxy_pass指向尚未启动的服务,Nginx会启动失败,并抛出Host Not Found异常。

下面是一个nginx conf 的基本配置


这样配置的话,如果some-service服务没有启动,Nginx会启动失败。

下面是调整过的nginx conf


第一步:设置resolver

127.0.0.11是Docker内部的DNS服务,能把服务名解析为ipv4地址,这个DNS不会改变,所以硬编码没有问题。 valid 设置缓存有效时间,注意要将ipv6设置为off,似乎nginx会优先使用ipv6,而Docker的DNS解析是ipv4的,所以会出现解析失败问题。

第二步:将服务地址存为变量

使用set $something http://some-service:port设置变量,然后以变量的方式传入proxy_pass

结果

通过上面的修改,Nginx在遇到没有启动的服务时会返回一个错误页面,但是不会直接退出了。之后在服务启动后,再次访问页面,会正常访问,不需要重启Nginx

标签:

Docker
开发
Nginx

上一篇

下一篇