Comment Déployer Le Proxy Inverse NGINX Sur Docker

Introduction

Un proxy inverse intercepte les requêtes entrantes et les dirige vers le serveur approprié. Non seulement cela accélère les performances, mais cela renforce également la sécurité du serveur.

Le moyen le plus simple de configurer et de gérer les proxys inverses consiste à utiliser Nginx et Docker. Ce guide configure deux exemples de services Web dans des conteneurs Docker et un proxy inverse Nginx pour ces services.

Dans ce didacticiel, vous apprendrez à configurer un proxy inverse sur Docker pour deux exemples de serveurs Web.

Conditions préalables

  • Un compte utilisateur avec  des privilèges sudo 
  • Une ligne de commande/fenêtre de terminal ( Ctrl-Alt-T )
  • Docker installé sur votre système
  • Un nom de domaine enregistré avec un certificat SSL associé

Pourquoi Avez-vous Besoin D’un Proxy Inverse ?

Alors que le serveur proxy standard protège les clients, le proxy inverse protège le serveur .

Un proxy inverse est un type de proxy installé derrière le pare-feu du réseau privé. Son rôle principal est d’intercepter le trafic et de diriger une demande vers le serveur approprié sur le backend.

Les principales raisons d’utiliser un proxy inverse sont d’améliorer la sécurité et les performances . Si vous avez des services exécutés sur plusieurs pods, vous pouvez rediriger toutes les requêtes entrant sur le réseau pour qu’elles passent par un certain nombre de ports spécifiés.

De plus, les proxys inverses peuvent également gérer le cryptage SSL, la mise en cache et la compression des données.

Étape 1 : Créer Un Exemple De Service Web

1. Commencez par créer un nouveau répertoire pour le premier exemple de service Web. Dans ce tutoriel, nous créons un répertoire example1 , mais vous pouvez utiliser un nom de votre choix.

mkdir exemple1

2. Accédez à ce répertoire :

cd exemple1

3. Créez un fichier de configuration YAML docker-compose pour le premier conteneur afin de définir le service. Utilisez un éditeur de texte de votre choix (dans cet exemple, nous utilisons Nano).

sudo nano docker-compose.yml

4. Ajoutez ensuite le contenu suivant dans le fichier .yaml :

version 2'
prestations de service:
 application :
 image : nginx
 tomes :
 - .:/usr/share/nginx/html
 ports :
 - "80"

Le fichier docker-compose spécifie qu’il s’agit d’un service d’ application qui utilise l’ image nginx . Il monte la racine de example1 de l’hôte Docker sur /usr/share/nginx/html/ . Enfin, la configuration expose le service sur le port 80 .

Le fichier docker-compose.yml varie en fonction du service que vous souhaitez exécuter. La configuration ci-dessus est spécifique au service Web que nous créons pour ce didacticiel.

Remarque : Comme il s’agit d’un exemple de service, nous n’avons pas inclus le numéro de version de l’image nginx. Cependant, dans un environnement de production, assurez-vous de spécifier également la version.

4. Enregistrez et quittez le fichier.

5. Dans le même répertoire example1 , créez un fichier d’index pour le service Web :

sudo nano index.html

6. Ajoutez quelques lignes simples à afficher sur l’exemple de page Web :


Site Web 1


Bonjour! Ceci Est Le Premier Exemple De Site Web.

7. Enregistrez et fermez le fichier.

8. Créez le service nouvellement créé à l’aide de la commande docker-compose :

construction sudo docker-compose

Si vous utilisez une image prédéfinie, comme dans cet exemple, la sortie répond avec app uses an image, en ignorant .

9. Ensuite, démarrez le conteneur avec :

sudo docker-composer jusqu'à -d

Étape 2 : Créer Un Deuxième Exemple De Service Web

Créez un deuxième exemple de service Web en suivant le même processus.

Assurez-vous de revenir au répertoire personnel si vous êtes toujours dans example1 . Pour ce faire, exécutez cd dans la fenêtre du terminal.

1. Créez un nouveau répertoire dans lequel vous stockerez le docker-compose et le fichier d’index pour le deuxième site Web. Nous nommerons ce répertoire example2 .

mkdir exemple2

2. Passez à example2 en exécutant :

cd exemple2

3. Créez un fichier docker-compose :

sudo nano docker-compose.yml

4. Définissez le service en utilisant les mêmes spécifications qu’à l’étape 1. Ajoutez le contenu suivant au fichier :

version 2'
prestations de service:
 application :
 image : nginx
 tomes :
 - .:/usr/share/nginx/html
 ports :
 - "80"

5. Enregistrez et quittez le fichier.

6. Créez ensuite un fichier d’index pour le deuxième service Web en exécutant :

sudo nano index.html

7. Ajoutez du contenu au fichier :


Site Web 2


Bonjour! Ceci Est Le Deuxième Exemple De Site Web.

8. Enregistrez les modifications et quittez le fichier.

9. Créez le deuxième service et démarrez le conteneur en exécutant les commandes :

construction sudo docker-compose
sudo docker-composer jusqu'à -d

Étape 3 : Répertorier Les Conteneurs

Pour vérifier que les conteneurs des deux services sont opérationnels, répertoriez tous les conteneurs avec la commande :

docker ps-a

Vous devriez voir des conteneurs pour les deux services Web répertoriés dans la sortie.

Étape 4 : Configurer Le Proxy Inverse

Ensuite, vous devez installer et configurer un conteneur de proxy inverse. Cela nécessite la création de plusieurs fichiers et sous-répertoires, qui doivent tous être stockés dans le répertoire proxy .

Par conséquent, la première étape consiste à créer et à naviguer dans le répertoire proxy . Pour ce faire, exécutez les commandes :

proxy mkdir
proxy cd

Configurer Le Dockerfile

1. Une fois dans le répertoire proxy , créez un Dockerfile pour une nouvelle image personnalisée :

sudo nano Dockerfile

2. Le fichier doit contenir les éléments suivants :

DE nginx

COPIER ./default.conf /etc/nginx/conf.d/default.conf

COPIER ./backend-not-found.html /var/www/html/backend-not-found.html

COPIER ./includes/ /etc/nginx/includes/

COPIER ./ssl/ /etc/ssl/certs/nginx/

Le Dockerfile est basé sur l’image nginx. Il copie également un certain nombre de fichiers depuis la machine locale :

  • la configuration par défaut du service proxy
  • une réponse d’erreur HTML
  • configurations et certificats proxy et SSL

3. Enregistrez et quittez le Dockerfile.

Configurer Le Fichier Backend Introuvable

Créez un fichier d’index pour une réponse introuvable :

sudo nano backend-not-found.html

Ajoutez le contenu :


Serveur proxy introuvable


Serveur Proxy Introuvable

3. Enregistrez les modifications et fermez le fichier.

Configurer Le Fichier Default.conf

1. Créez le fichier default.conf dans le répertoire proxy :

sudo nano default.conf

2. Ajoutez le contenu :

# configuration du service Web1.
serveur
écouter 80 ;
écouter 443 ssl
nom_serveur exemple1.test ;

# Chemin pour la configuration SSL/clé/certificat
certificat_ssl /etc/ssl/certs/nginx/example1.crt ;
ssl_certificate_key /etc/ssl/certs/nginx/example1.key ;
inclure /etc/nginx/includes/ssl.conf ;

emplacement /
inclure /etc/nginx/includes/proxy.conf ;
proxy_pass


access_log off ;
error_log /var/log/nginx/error.log erreur ;


# configuration du service Web2.
serveur
écouter 80 ;
écouter 443 ssl
nom_serveur exemple2.test ;

# Chemin pour la configuration SSL/clé/certificat
certificat_ssl /etc/ssl/certs/nginx/example2.crt ;
ssl_certificate_key /etc/ssl/certs/nginx/example2.key ;
inclure /etc/nginx/includes/ssl.conf ;

emplacement /
inclure /etc/nginx/includes/proxy.conf ;
proxy_pass


access_log off ;
error_log /var/log/nginx/error.log erreur ;


# Défaut
serveur
écouter 80 default_server ;

nom du serveur _;
racine /var/www/html;

jeu de caractères UTF-8 ;

error_page 404 /backend-not-found.html ;
location = /backend-not-found.html
autorise tout;

emplacement /
retour 404 ;


access_log off ;
log_not_found désactivé ;
error_log /var/log/nginx/error.log erreur ;

La configuration se compose de deux services Web – example1.test et example2.test . Les deux composants serveur écoutent le port 80 et dirigent Nginx vers le certificat SSL approprié.

Configurer Le Fichier Docker-compose.yml

1. Créez un nouveau fichier docker-compose.yml pour le service proxy :

sudo nano docker-compose.yml

2. Copiez et collez le contenu suivant dans le fichier :

version 2'
prestations de service:
Procuration:
construire: ./
réseaux :
- Exemple 1
- exemple2
ports :
- 8
- 44

réseaux :
Exemple 1:
externe:
nom : example1_default
exemple2 :
externe:
nom : example2_default

Dans ce fichier, vous connectez le proxy et les réseaux externes (les services Web example1 et example2 ). De plus, les ports 80/443 du service proxy sont liés aux ports 80/443 de l’hôte Docker.

Générer Des Clés Et Des Certificats

1. Commencez par créer un sous-répertoire ( ssl ) dans le dossier proxy :

mkdir ssl

2. Naviguez dans le sous-répertoire ssl avec :

cd ssl

3. Ensuite, exécutez chaque commande tactile répertoriée ci-dessous pour créer les fichiers requis :

toucher example1.crt
toucher example1.key
toucher example2.crt
touchez example2.key

4. Ensuite, utilisez OpenSSL pour générer des clés et des certificats pour vos services Web. Pour le premier service Web ( exemple1 ), exécutez la commande :

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example1.key -out example1.crt

La commande génère une clé privée RSA 2048 bits et la stocke dans le fichier example1.key .

Il vous sera également demandé de fournir des informations qui seront incorporées dans la demande de certificat. Vous pouvez laisser certains champs vides.

5. Répétez le processus pour générer des clés et des certificats pour le deuxième service Web ( exemple2 ). Tapez la commande suivante dans la fenêtre du terminal :

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example2.key -out example2.crt

Cela génère une clé privée RSA de 2048 bits pour example2 et l’enregistre dans le fichier example2.key .

Modifier La Configuration Du Proxy Et SSL

1. Quittez le sous-répertoire ssl et revenez dans proxy . Pour ce faire, utilisez la commande :

cd ..

2. Ensuite, créez un nouveau sous-répertoire sous le nom includes :

mkdir inclut

3. Naviguez dans les inclusions et créez les fichiers proxy.conf et ssl.conf :

le cd comprend
toucher proxy.conf
toucher ssl.conf

4. Ensuite, ouvrez le fichier proxy.conf :

sudo nano proxy.conf

5. Ajoutez la configuration suivante :

proxy_set_header Hôte €hôte ;
proxy_set_header X-Real-IP €remote_addr ;
proxy_set_header X-Forwarded-For €proxy_add_x_forwarded_for ;
proxy_set_header X-Forwarded-Proto €scheme ;
proxy_buffering désactivé ;
proxy_request_buffering désactivé ;
Procuration_
proxy_intercept_errors activé ;

6. Enregistrez et quittez proxy.conf .

7. Ouvrez le fichier ssl.conf :

sudo nano ssl.conf

8. Collez les lignes suivantes dans le fichier :

ssl_session_timeout 1j ;
ssl_session_cache partagé : SSL : 50 m ;
ssl_session_tickets désactivé ;

protocoles_ssl TLSv1 TLSv1.1 TLSv1.2 ;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-
ECDSA-AES128-GCM-SHA256 : ECDHE-RSA-AES128-GCM-SHA256 : ECDHE-ECDSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-
GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-
AES128-SHAECDHE-RSA-AES256-SHA384 : ECDHE-RSA-AES128-SHA : ECDHE-ECDSA-AES256-
SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256 :
DHE-RSA-AES128-SHA :DHE-RSA-AES256-SHA256 :DHE-RSA-AES256-SHA :ECDHE-ECDSA-
DES-CBC3-SHA : ECDHE-RSA-DES-CBC3-SHA : EDH-RSA-DES-CBC3-SHA : AES128-GCM-SHA256 :
AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-
CBC3-SHA:!DSS' ;
ssl_prefer_server_ciphers activé ;

Modifier Le Fichier Hosts

1. Retournez dans le répertoire proxy :

CD

2. Ouvrez le fichier /etc/hosts :

sudo nano etc/hôtes

3. Ajoutez les lignes suivantes pour mapper les noms d’hôte des services Web à l’adresse IP privée des hôtes Docker :

10.0.2.15 exemple1.test
10.0.2.15 exemple2.test

4. Enregistrez les modifications et fermez le fichier.

Étape 5 : Démarrez Le Proxy Inverse

1. Une fois les fichiers de configuration en place, utilisez la commande docker-compose pour créer le conteneur :

construction sudo docker-compose

2. Ensuite, exécutez le conteneur :

sudo docker-composer jusqu'à -d

3. Vérifiez que vous disposez de trois conteneurs : deux services Web et un conteneur de proxy inverse :

docker sudo ps-a

Étape 6 : Vérifiez Si Le Proxy Inverse Fonctionne

Utilisez la commande curl pour vérifier si les services Web et le proxy inverse fonctionnent correctement. Chaque domaine doit répondre avec la sortie appropriée.

1. Exécutez la commande suivante pour vérifier le premier service Web :

sudo curl example1.test

La sortie répond avec le code HTML créé pour example1.test .

2. Ensuite, vérifiez que le deuxième service Web fonctionne avec le proxy inverse avec :

sudo curl exemple2.test

La sortie répond avec le code HTML example2.test .

Conclusion

Ce didacticiel vous a montré comment utiliser Docker pour configurer deux exemples de services Web et un proxy inverse Nginx pour eux.

Cet article a-t-il été utile?

Oui Non