Reverse proxy nginx & Docker Compose

J’utilise nginx comme reverse proxy en amont de mes containers (nginx étant lui même dans un container) afin de pouvoir gérer plus facilement les redirections, le load balacing ou encore protéger des instances node.js d’un trafic direct. Je le préfère également à node afin de délivrer des fichiers statiques, jouant également un rôle de serveur.

Voici un extrait de conf nginx :

La première partie permet de définir le sous-domaine utilisé pour délivrer les fichiers statiques et où ils se trouvent sur le serveur. La seconde partie permet de rediriger le trafic directement sur l’instance node.js. On pourrait ainsi mettre en place une règle de load balancing.

On remarque que node est contacté directement via un hostname. Il s’agit d’une feature de Docker Compose très utile nous évitant de jongler avec des IPs qui peuvent potentiellement changer en cas de redémarrage des containers (pour peu qu’ils ne démarrent pas dans le même ordre).

/!\ L’utilisation du resolver est importante si vous ne voulez pas faire planter nginx dans le cas de figure où l’hostname serait injoignable. L’IP 127.0.0.11 correspond au serveur DNS de Docker.

Docker Compose se paramètre directement via un fichier docker-compose.yml :

Dans cet extrait on peut voir que le nom du service node est utilisé comme hostname grâce au lien fait au niveau du service nginx. Au niveau de node le port 8080 est uniquement exposé à l’intérieur du network créé par Docker Compose. Il n’est donc pas accessible de l’extérieur. Le port 80 de nginx est lui mappé au port 80 externe et sert d’unique point d’entrée.