NGINX启动上游错误:在上游找不到主机

时间:2020-04-19 12:56:25

标签: docker nginx reverse-proxy

我正在与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查找,以检查您是否在配置中输入了错字。

感谢您的帮助

0 个答案:

没有答案