gpt4 book ai didi

nginx - Docker - nginx 代理 - 访问容器之间的主机

转载 作者:行者123 更新时间:2023-12-02 18:32:28 24 4
gpt4 key购买 nike

我有网络应用程序。

  • 公共(public)网络应用程序 (app1)
  • api 网络应用 (app2)

  • 我为此应用程序进行 docker 配置。每个应用程序都在其容器中。要从 Web 访问此应用程序,请使用 nginx 配置容器,其中 nginx 代理所有请求。
    所以我可以运行 - http://app1.dev/http://app2.dev/

    但我需要从 app1 访问 http://app2.dev/ (从 app1 容器访问主机 app2.dev)。

    Ping(来自 app1 容器):
    PING app2.dev (127.0.53.53) 56(84) bytes of data.
    64 bytes from 127.0.53.53: icmp_seq=1 ttl=64 time=0.027 ms
    64 bytes from 127.0.53.53: icmp_seq=2 ttl=64 time=0.038 ms
    64 bytes from 127.0.53.53: icmp_seq=3 ttl=64 time=0.038 ms

    我应该配置什么,才能访问 http://app2.dev/从 app1 容器托管?

    Nginx 代理配置
    upstream app1_upstream {
    server app1;
    }
    upstream app1_upstream {
    server app2;
    }
    server {
    listen 80;

    server_name app1.dev
    app2.dev;

    location / {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_cache_bypass $http_upgrade;

    if ($host = "app1.dev") {
    proxy_pass http://app1;
    }

    if ($host = "app2.dev") {
    proxy_pass http://app2;
    }
    }

    error_log /var/log/nginx/proxy_error.log;
    access_log /var/log/nginx/proxy_access.log;
    }

    docker 撰写
    version: '2'
    services:
    proxy:
    build: ./proxy/
    ports:
    - "80:80"
    - "443:443"
    links:
    - app1
    - app2
    - app1:app1
    - app2:app2
    hostname: proxy

    app1:
    build: ./app1/
    volumes:
    - ../app1/:/var/www/app1
    hostname: app1

    app2:
    build: ./app2/
    volumes:
    - ../app2/:/var/www/app2
    hostname: app2
    docker-compose ps
    app1      /sbin/my_init  Up      80/tcp                                   
    app2 /sbin/my_init Up 80/tcp
    proxy_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp

    最佳答案

    不确定您运行的是哪个版本的 docker,但如果您(或能够)运行 1.10,您应该使用 docker 网络而不是使用“链接”。

    如果您在同一个 docker 网络上运行所有三个容器,那么它们将可以通过容器名称相互访问。

    这将允许您在不通过代理返回的情况下从 app1 调用 app2(尽管我将其称为反模式,就好像您要将接口(interface)更改为 app2 您必须更新 app1 和代理一样,但我会让 app1 通过您的代理调用 app2,以便您维护一个界面)。

    有关 Docker 网络的更多信息:https://docs.docker.com/engine/userguide/networking/dockernetworks/

    TLDR:

    # create bridge network (for single host)
    docker networks create my-network

    然后也改变你的作曲:
    version: '2'
    services:
    proxy:
    build: ./proxy/
    ports:
    - "80:80"
    - "443:443"
    networks:
    - my-network
    hostname: proxy

    app1:
    build: ./app1/
    volumes:
    - ../app1/:/var/www/app1
    networks:
    - my-network
    hostname: app1

    app2:
    build: ./app2/
    volumes:
    - ../app2/:/var/www/app2
    networks:
    - my-network
    hostname: app2

    networks:
    my-network:
    external: true

    关于nginx - Docker - nginx 代理 - 访问容器之间的主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066408/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com