如何使 nginx docker 容器可通过代理访问?

How to make ngnix docker containers accessible through proxy?

假设我有三个 docker 个装有 nginx 的容器。它们的暴露端口分别映射到 8080、8181 和 8282。我想在 8080 上配置服务器,它将 /example01 和 /example02 代理到其他两个应用程序。这是我的配置文件:

server {

    listen 80;
    server_name  localhost;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://localhost:8181/;
    }

    location /example02 {
        proxy_pass http://localhost:8282/;
    }
}

因此,如果我 运行 个容器,则每个应用程序都可以访问 (http://localhost:8080, http://localhost:8181 and http://localhost:8282)。

现在,我真的不明白为什么 http://localhost:8080/example01 and http://localhost:8080/example02 没有正确重定向。相反,我收到 502 错误网关错误。是不是和我暴露的端口和VIRTUAL_PORT有关?

提前致谢。

这是因为容器网络范围。这些容器的 localhost 分别位于每个容器内 - 这不是您的端口映射到的位置。相反:

$ ifconfig

在您的主机上找到您的本地 IP 地址并将流量代理到您的主机 - 已映射端口。

配置文件:

server {

    listen 80;
    server_name  localhost;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://192.168.1.2:8181/;
    }

    location /example02 {
        proxy_pass http://192.168.1.2:8282/;
    }
}

其中 192.168.1.2 是您自己机器的本地 ip 地址。

另一种方法是 link 这些容器,而不是通过本地主机代理 - 但是您在 link 定义中提供的别名。如果你选择这种方法,我可以详细说明。

-- 用linking 方法编辑--

为了让您的服务 linked,您需要使用 docker 工具 docker-compose。假设您熟悉它是什么(底部的 doc refs),您可以像这样编写一个 compose 文件:

first-nginx:
   build: first-nginx/
   ports:
      - 8080:80
   links:
      - second-nginx
      - third-nginx

second-nginx:
   build: second-nginx/
   ports:
      - 8081:80

third-nginx:
   build: third-nginx/
   ports:
      - 8082:80

像这样放在你项目的根目录下:

root
  - first-nginx
    + nginx.conf
    + Dockerfile
    + some-other.files
  - second-nginx
    + some.files
    + another-nginx.conf
    + Dockerfile
  - third-nginx
    + some-nginx.conf
    + Dockerfile
  + docker-compose.yml

然后您将 "main" nginx 配置为使用创建的 links,如下所示:

配置文件:

server {

    listen 80;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://second-nginx/;
    }

    location /example02 {
        proxy_pass http://third-nginx/;
    }
}

有什么不明白的地方一定要问。

links ref

compose ref