wake-up-neo.net

Subdomains, Nginx-Proxy und Docker-Compose

Ich suche nach einer Möglichkeit, Nginx für den Zugriff auf gehostete Dienste über eine Unterdomäne meines Servers zu konfigurieren. Diese Dienste und Nginx werden mit Docker-compose instanziiert.

Kurz gesagt, wenn ich jenkins.192.168.1.2 eingebe, sollte ich auf Jenkins zugreifen, die auf 192.168.1.2 gehostet werden und mit Nginx-Proxy umgeleitet werden.

Ein kurzer Blick auf das, was ich gerade habe. Es funktioniert nicht ohne einen Top-Domainnamen, daher funktioniert es gut auf play-with-docker.com , jedoch nicht lokal mit zum Beispiel 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;
      }
}

Um zu sehen, was ich will: https://github.com/Ivaprag/devtools-compose

Mein übergeordnetes Ziel ist es, auf Remote-Docker-Container zuzugreifen, ohne den DNS-Dienst der Clients zu ändern.

7
Ivaprag

Leider unterstützt nginx keine Subdomains für solche IP-Adressen.

Sie müssten entweder die Client-Hosts-Datei ändern (was Sie sagten, dass Sie dies nicht tun wollten) ...


Oder Sie können Ihren Nginx so einstellen, dass er wie folgt umleitet:

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

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

dies ermöglicht Ihnen den Zugriff auf Jenkins unter 192.168.1.2/jenkins.


Oder Sie können versuchen, Ihre verschiedenen Container über verschiedene Ports zu bedienen. Z.B:

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

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

Und dann auf Jenkins von 192.168.1.2:8081/ zugreifen

5
sharif9876

Wenn Sie bereits Docker-Compose verwenden, empfehle ich die Verwendung des jwilder-Nginx-Proxy-Containers.

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

Auf diese Weise können Sie dem Backend des definierten nginx-Proxys eine unbegrenzte Anzahl von Web-Service-Containern hinzufügen. Beispiel:

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

Der nginx-proxy stellt die Host Dockersockendatei bereit, um Informationen zu den anderen aktiven Containern zu erhalten. Wenn einer der Container die env-Variable VIRTUAL_Host hat, fügt er diese der Konfiguration hinzu.

2
Marcos Pagnucco

Ich habe versucht, Subdomains in Nginx (Host) für zwei virtuelle Hosts in einem LXC-Container zu konfigurieren.

So hat es bei mir funktioniert:

Für Apache (im Container) habe ich zwei virtuelle Hosts erstellt: einen in Port 80 und einen in Port 90.
Um Port 90 in Apache2 (Container) zu aktivieren, musste die Zeile "Listen 90" unter "Listen 80" in /etc/Apache2/ports.conf eingefügt werden

Für NGINX (Host-Computer) wurden zwei DOMAINS konfiguriert, die beide in Port 80 liegen und unabhängige .conf-Dateien in/etc/nginx/sites-available erstellen. Erstellt für jede Datei einen symbolischen Link zu/etc/nginx/sites-enabled.

Leiten Sie in der ersten NGINX-Datei myfirstdomain.conf zu http: //my.contai.ner.ip: 8 um.

Leiten Sie in der zweiten NGINX-Datei myseconddomain.conf zu http: //my.contai.ner.ip: 9 um

Das war es für mich!

1
Luis Bautista