我正在与NGINX和docker一起玩。 我尝试将nginx用作3个容器的反向代理。
每次我尝试启动Nginx服务器并且上游容器之一未运行时,都会出现错误:[emerg] host not found in upstream "f505218f8932:8000"
我的目标是补偿上游服务器故障。 但是,如果一台主机出现故障,nginx无法启动,则整个nginx都将无用。
我试图将DNS解析器设置为docker容器,但是没有任何运气。
当所有上游容器都在运行时,我的配置工作正常。甚至我杀死/停止了上游服务器之一。
棘手的部分是Nginx的开始阶段...
配置文件:
upstream api-gateway {
server f505218f8932:8000;
server fcad286dab24:8000;
server 0f1f0219dc93:8000;
}
# main server block
# this servers the frontend
# if no static file found, proxy to backend
server {
#listen 443 ssl;
listen 80;
server_name example.com www.example.com;
access_log off;
server_tokens off;
root /var/www/html/example.com;
location / {
# server static files
# if no static file is found
# us the backend location
try_files index.html $uri $uri/ @backend;
autoindex off;
}
location @backend {
# use api-gateway upstream
proxy_pass http://api-gateway;
proxy_next_upstream error timeout;
resolver 127.0.0.11 valid=30s;
# disable buffering
proxy_buffering off;
# set proxy header
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Connection "Upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
编辑:
经过长时间的调试,如果发现docker无法从未运行的容器中解析主机名。没关系,因为容器的IP地址在启动后可以更改。
因此,问题在于nginx在启动/重新加载时进行了dns查找,以检查您是否在配置中输入了错字。
感谢您的帮助