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
上一篇
下一篇