Docker nginx proxy pour héberger

Brève description:

Nginx s’exécutant sur docker, comment configurer nginx pour qu’il transfère les appels vers l’hôte.

Longue description:

Nous avons une application Web qui communique avec deux backends (laisse rest1, rest2 et rest3). Nous sums responsables du rest1 .

Considérons que j’ai commencé rest1 manuellement sur mon PC et en cours d’exécution sur le port 2345. Je souhaite que nginx (qui s’exécute dans docker) redirige tous les appels au rest1 vers ma propre instance en cours d’exécution (notez que l’instance est en cours d’exécution sur l’hôte, pas sur un conteneur ni sur le rest1 ). Et pour rest2 et rest3 à un autre nœud rest3 ou peut-être un autre serveur (qui se soucie).

Ce que je recherche est:

  1. Configurations docker-compose.yml (si nécessaire).
  2. Configuration nginx.

Merci d’avance.

Configurez nginx comme suit (assurez-vous de remplacer l’adresse IP de Docker Host) et enregistrez-le sous default.conf :

 server { listen 80; server_name _; location / { proxy_pass http://; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } 

Maintenant, ouvrez le conteneur:

 docker run -d --name nginx -p 80:80 -v /path/to/nginx/config/default.conf:/etc/nginx/conf.d/default.conf nginx 

Solution 1

Utilisez network_mode: host , cela va lier votre instance nginx à l’interface réseau de l’hôte. Cela peut entraîner des conflits lors de l’exécution de plusieurs conteneurs nginx: chaque port exposé est lié à l’interface de l’hôte.

Solution 2

Je gère plus d’instances nginx pour chaque service que je voudrais exposer au monde extérieur. Pour garder les configurations nginx simples et éviter de lier chaque nginx à l’hôte, utilisez la structure du conteneur:

dockerhost – un conteneur factice avec network_mode: host

proxy – conteneur nginx utilisé comme proxy pour héberger le service,

dockerhost à proxy , cela appenda une entrée /etc/hosts dans proxy contianer – nous pouvons utiliser ‘dockerhost’ comme nom d’hôte dans la configuration nginx.

docker-compose.yaml

 version: '3' services: dockerhost: image: alpine entrypoint: /bin/sh -c "tail -f /dev/null" network_mode: host proxy: image: nginx:alpine links: - dockerhost:dockerhost ports: - "18080:80" volumes: - /share/Container/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro 

default.conf

  location / { proxy_pass http://dockerhost:8080; 

Cette méthode nous permet d’avoir des certificates d’authentification automatisés générés pour chaque service exécuté sur mon serveur. Si vous êtes intéressé, je peux poster un message sur la solution.