Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
configuration_de_nginx_comme_reverse_proxy_web [2023/07/30 22:32] – [Procédure] superadminconfiguration_de_nginx_comme_reverse_proxy_web [2023/09/11 16:50] (Version actuelle) superadmin
Ligne 3: Ligne 3:
 ===== Introduction ===== ===== Introduction =====
  
-L'intérêt de cette page est de comprendre comment mettre en place un reverse proxy web avec Nginx. Cette machine aura pour but de relayer les paquets à destination de serveurs web accessibles uniquement en local, ce qui constitue un premier rempart de sécurité pour ceux-ci, et permet d'accélérer l'accès aux pages web grâce à la mise en cache. Pour cela, on va utiliser le principe de "virtual hosts"+L'intérêt de cette page est de comprendre comment mettre en place un reverse proxy web avec Nginx. Cette machine aura pour but de relayer les paquets à destination de serveurs web accessibles uniquement en local, ce qui constitue un premier rempart de sécurité pour ceux-ci, et permet d'accélérer l'accès aux pages web grâce à la mise en cache. Pour cela, on va utiliser le principe de "virtual hosts".
  
 Un virtual host est un fichier de configuration spécifique à un domaine ou sous-domaine web, qui permet de contrôler finement les paramètres accès à ses sites web, et de faire cohabiter plusieurs sites web utilisant le même port de connexion sur une seule machine. Un virtual host est un fichier de configuration spécifique à un domaine ou sous-domaine web, qui permet de contrôler finement les paramètres accès à ses sites web, et de faire cohabiter plusieurs sites web utilisant le même port de connexion sur une seule machine.
  
-Ce tutoriel est fait pour nginx mais le serveur web apache fonctionne de la même manière, malgré que la syntaxe de la configuration soit différente.+Ce tutoriel est fait pour Nginx mais le serveur web apache fonctionne de la même manière, malgré que la syntaxe de la configuration soit différente.
 ===== Topologie du LAB ===== ===== Topologie du LAB =====
  
 +Il y a ici deux topologies possibles, au choix :
 +  * Une machine servant de proxy + 2 autres faisant office de serveurs web
 +  * Une machine unique hébergeant le proxy et les 2 serveurs web sous forme de conteneurs docker exposant leur site chacun sur un port réseau différent de la machine physique.
 +
 +{{ ::topologies_reverseproxyweb.png?600 |}}
 +
 +Dans le cadre de ce tutoriel, on utilisera la seconde. Seule l'IP des serveurs web finaux change puisque dans ce cas c'est celle du proxy qui sera utilisée.
 ===== Pré-requis ===== ===== Pré-requis =====
  
 __Pour ce LAB il faudra :__ __Pour ce LAB il faudra :__
   * Un serveur sous Linux qui aura le rôle de reverse proxy, si possible avec 2 cartes réseau.   * Un serveur sous Linux qui aura le rôle de reverse proxy, si possible avec 2 cartes réseau.
-  * Un autre serveur web fonctionnel sous n'importe quel OS, et connecté au même réseau LAN que le premier.+  * Un deux autres serveurs web fonctionnels sous n'importe quel OS, et connectés au même réseau LAN que le premier, ou sous forme de conteneurs installés sur la même machine que le proxy.
  
-===== Procédure =====+===== Instructions =====
  
 Créer un virtualhost pour le site1 :  Créer un virtualhost pour le site1 : 
Ligne 36: Ligne 43:
     #Indique  au serveur final quel protocole est utilisé entre l'hôte source et le proxy (pour les logs)     #Indique  au serveur final quel protocole est utilisé entre l'hôte source et le proxy (pour les logs)
         proxy_set_header X-Forwarded-Proto $scheme;         proxy_set_header X-Forwarded-Proto $scheme;
 +    #Indique au serveur final le port destination utilisé par le client pour se connecter au proxy
 +        proxy_set_header X-Forwarded-Port $server_port;
     }     }
    </code>    </code>
Ligne 75: Ligne 84:
     #Indique  au serveur final quel protocole est utilisé entre l'hôte source et le proxy (pour les logs)     #Indique  au serveur final quel protocole est utilisé entre l'hôte source et le proxy (pour les logs)
         proxy_set_header X-Forwarded-Proto $scheme;         proxy_set_header X-Forwarded-Proto $scheme;
 +    #Indique au serveur final le port destination utilisé par le client pour se connecter au proxy
 +        proxy_set_header X-Forwarded-Port $server_port;
     }     }
    </code>    </code>
Ligne 85: Ligne 96:
        
 <code>systemctl restart nginx</code> <code>systemctl restart nginx</code>
 +
 +:!: La directive ''proxy_set_header Host $host;'' peut être remplacée par ''proxy_set_header X-Forwarded-Host $host;'' néanmoins celle-ci ne fonctionne pas dans toutes les situations, je ne recommande pas son utilisation.
  
 ===== Sources ===== ===== Sources =====
  
 +https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-to-setup-Nginx-reverse-proxy-servers-by-example
 +
 +https://serverfault.com/questions/706438/what-is-the-difference-between-nginx-variables-host-http-host-and-server-na
  
 +https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto