web-dev-qa-db-fra.com

Sous-domaines, Nginx-proxy et Docker-compose

Je cherche un moyen de configurer Nginx pour accéder aux services hébergés via un sous-domaine de mon serveur. Ces services et Nginx sont instanciés avec Docker-compose.

En bref, lors de la saisie de jenkins.192.168.1.2, je devrais accéder à Jenkins hébergé sur 192.168.1.2 redirigé avec un proxy Nginx.

Un aperçu de ce que j'ai actuellement. Cela ne fonctionne pas sans un nom de domaine de premier plan, donc cela fonctionne bien sur play-with-docker.com , mais pas localement avec par exemple 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;
      }
}

Pour avoir un aperçu de ce que je veux: https://github.com/Ivaprag/devtools-compose

Mon objectif général est d'accéder aux conteneurs de menu fixe à distance sans modifier le service DNS des clients.

7
Ivaprag

Malheureusement, nginx ne prend pas en charge les sous-domaines sur les adresses IP.

Vous devrez soit modifier le fichier hôtes des clients (ce que vous avez dit ne pas vouloir faire) ...


Ou vous pouvez simplement configurer votre nginx pour qu'il redirige de la manière suivante:

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

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

ce qui vous permettrait d'accéder à Jenkins à 192.168.1.2/jenkins


Ou vous pouvez essayer de servir vos différents conteneurs via différents ports. Par exemple:

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

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

Et puis accéder à Jenkins à partir de 192.168.1.2:8081/

5
sharif9876

Si vous utilisez déjà docker-compose, je vous recommande d’utiliser le conteneur jwilder nginx-proxy.

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

Cela vous permet d’ajouter un nombre illimité de conteneurs de services Web au backend du proxy nginx défini, par exemple:

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 monte le fichier de station d'accueil Host docker afin d'obtenir des informations sur les autres conteneurs en cours d'exécution. Si l'un d'entre eux possède la variable env VIRTUAL_Host, il l'ajoutera à sa configuration.

2
Marcos Pagnucco