web-dev-qa-db-ja.com

サブドメイン、Nginx-proxyおよびDocker-compose

サーバーのサブドメインを介してホストされているサービスにアクセスするようにNginxを構成する方法を探しています。これらのサービスとNginxは、Docker-composeでインスタンス化されます。

つまり、jenkins.192.168.1.2と入力すると、Nginxプロキシでリダイレクトされた192.168.1.2でホストされているJenkinsにアクセスする必要があります。

私が現在持っているものの概要。それは機能しませんなしトップドメイン名なので、 play-with-docker.com で正常に機能しますが、たとえば192.168。 1.2

server {
    server_name jenkins.REVERSE_PROXY_DOMAIN_NAME;
        location / {
            proxy_pass http://jenkins:8080;
            proxy_set_header Host $Host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host $Host:$server_port;
            proxy_set_header X-Forwarded-Server $Host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
}

私が欲しいものを見るには: https://github.com/Ivaprag/devtools-compose

私の全体的な目標は、クライアントのDNSサービスを変更せずにリモートDockerコンテナにアクセスすることです。

8
Ivaprag

残念ながら、nginxはそのようなIPアドレスのサブドメインをサポートしていません。

クライアントのhostsファイルを変更する必要があります(これはやりたくないと言っていました)...


または次のようにリダイレクトするようにnginxを設定できます:

location /jenkins {
    proxy_pass http://jenkins:8080;
    ...
}

location /other-container {
    proxy_pass http://other-container:8080;
}

これにより、192.168.1.2/jenkinsでjenkinsにアクセスできるようになります


またはさまざまなポートを介してさまざまなコンテナを試して提供できます。例えば:

server {
    listen 8081;
    location / {
        proxy_pass http://jenkins:8080;
        ...
    }
}

server {
    listen 8082;
    location / {
        proxy_pass http://other-container:8080;
        ...
    }
}

そして、192.168.1.2:8081/からjenkinsにアクセスします

6
sharif9876

すでにdocker-composeを使用している場合は、jwildernginx-proxyコンテナを使用することをお勧めします。

https://github.com/jwilder/nginx-proxy

これにより、定義されたnginxプロキシのバックエンドに無制限の数のWebサービスコンテナを追加できます。次に例を示します。

nginx-proxy:
  image: jwilder/nginx-proxy
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - "/etc/nginx/vhost.d"
    - "/usr/share/nginx/html"
    - "/var/run/docker.sock:/tmp/docker.sock:ro"
    - "nginx_certs:/etc/nginx/certs:rw"
nginx:
  build:
   context: ./docker/nginx/
   dockerfile: Dockerfile
  volumes_from:
     - data
  environment:
     VIRTUAL_Host: www.Host1.com
nginx_2:
  build:
   context: ./docker/nginx_2/
   dockerfile: Dockerfile
  volumes_from:
     - data
  environment:
     VIRTUAL_Host: www.Host2.com
Apache_1:
  build:
   context: ./docker/Apache_1/
   dockerfile: Dockerfile
  volumes_from:
     - data
  environment:
     VIRTUAL_Host: www.Host3.com

Nginx-proxyは、実行中の他のコンテナーに関する情報を取得するためにHost docker sockファイルをマウントします。コンテナーのいずれかにenv変数VIRTUAL_Hostが設定されている場合は、それを構成に追加します。

5
Marcos Pagnucco

1つのLXCコンテナー内の2つの仮想ホストに対して、nginx(ホスト)でサブドメインを構成しようとしていました。

それが私のために働いた方法:

Apache(コンテナー内)の場合、2つの仮想ホストを作成しました。1つはポート80に、もう1つはポート90に作成しました。
Apache2(コンテナ)でポート90を有効にするには、/ etc/Apache2 /ports.confの「Listen80」の下に「Listen90」という行を追加する必要がありました。

NGINX(ホストマシン)の場合、2つのドメインを構成しました。両方ともポート80で、/ etc/nginx/sites-availableに独立した.confファイルを作成します。/etc/nginx/sites-enabledへの各ファイルのシンボリックリンクを作成しました。

最初のNGINXmyfirstdomain.confファイルで、 http://my.contai.ner.ip:8 にリダイレクトします。

2番目のNGINXmyseconddomain.confファイルで、 http://my.contai.ner.ip:9 にリダイレクトします。

それは私にとってそれでした!

0
Luis Bautista