带有Docker主机名的反向代理

时间:2020-03-09 11:16:29

标签: docker nginx docker-compose

我有2个API和一个在Docker容器中工作的前端。它们都可以通过docker-compose创建,并且我有一个Nginx反向代理,它应该使用其主机名(即api-1.my-project.localhost)路由到它们。实际上,我已经完成了该过程,但是像今天早晨一样,每隔一段时间,使用这些主机名访问它时,我就会得到“不存在的域”或“我们找不到该站点”。

我不认为docker-compose.yml这么重要,但是我在这里包括了它:

version: "3.2"
services:
  api-1:
    # Runs on port 5000
    image: my-companies-docker-registry.api-1
  api-2:
    # Runs on port 5000
    image: my-companies-docker-registry.api-2
  main-front-end:
    # Runs on port 3000
    image: my-companies-docker-registry.main-front-end
  my-project:
    image: nginx
    depends_on:
      - api-1
      - api-2
      - main-front-end
    ports:
      - 80:80
    volumes:
      - type: bind
        read_only: true
        source: ./nginx
        target: /etc/nginx

我的nginx配置看起来像这样:

events {}
http {
    # Api 1
    upstream api-1{
        server api-1:5000;
    }

    server {
        listen       80;
        server_name  api-1.my-project.localhost;

        location / {
            proxy_pass http://api-1;
        }
    }

    # Api 2
    upstream api-2 {
        server api-2:5000;
    }

    server {
        listen       80;
        server_name  api-2.my-project.localhost;

        location / {
            proxy_pass http://api-2;
        }
    }

    # Main Front end

    upstream main-front-end {
        server main-front-end:3000;
    }

    server {
        listen       80 default_server deferred;
        server_name  my-project.localhost www.my-project.localhost;

        location / {
            proxy_pass http://main-front-end;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }
    }
}

这样做的目的是使我可以使用http://my-project.localhost访问网站,并使用api-1.my-project.localhostapi-2.my-project.localhost访问API。通过访问listen 80 default_server deferred获得http://localhost的同时,我可以访问nginx,这使我可以看到我的前端站点。因此docker-compose已正确绑定端口。

在过去的某个时候,我已经能够使用my-project.localhost后缀访问这些站点,但是现在情况不再如此。 This site建议为每个站点添加一个主机条目,我以前不记得这样做,因为有很多站点,这会花费一段时间,但是有可能我这样做了,现在将它们删除了。我也知道Nginx不是docker,所以我不知道这些主机名是如何提取并添加到我的计算机主机解析过程中的。

这怎么办?以前而不是现在呢?以及如何在不进行手动主机文件更改的情况下使设置生效?

0 个答案:

没有答案