Nginx

Proxy inversé Nginx

Proxy inversé Nginx

Qu'est-ce qu'un proxy inverse?

Un serveur proxy est celui qui communique avec Internet en votre nom. Par exemple, si le réseau de votre collège a bloqué https://www.Facebook.com/ mais le domaine  https://exampleproxy.com est toujours accessible, alors vous pouvez visiter ce dernier et il transmettra toutes vos demandes de serveurs Facebook à Facebook, et renverra par les réponses de Facebook à votre navigateur.

Pour récapituler, un proxy envoie des requêtes au nom d'un ou plusieurs clients à n'importe quel serveur sur Internet. Un proxy inverse se comporte de la même manière.

UNE proxy inverse reçoit une demande de tous les clients au nom d'un ou plusieurs les serveurs. Donc, si vous avez quelques serveurs hébergeant ww1.Exemple.com et seconde guerre mondiale.Exemple.com un serveur proxy inverse peut accepter des demandes au nom des deux serveurs, transmettre ces demandes à leurs points de terminaison respectifs où la réponse est générée et renvoyée au proxy inverse pour être renvoyée aux clients.

La mise en place

Avant de commencer à peaufiner les fichiers de configuration Nginx et à créer un serveur proxy inverse. Je veux définir dans le marbre à quoi ressemble ma configuration, donc lorsque vous essayez de mettre en œuvre votre conception, ce serait moins déroutant.

J'ai utilisé la plate-forme de DigitalOcean pour faire tourner trois VPS. Ils sont tous sur le même réseau, chacun avec sa propre IP privée, et un seul VPS a une IP publique statique (ce sera notre serveur proxy inverse.)

VM/Nom d'hôte IP privée IP publique Rôle
Proxy inverse dix.135.123.187 159.89.108.14 Proxy inverse, exécutant Nginx
Nœud-1 dix.135.123.183 N / A Lancer le premier site Web
Nœud-2 dix.135.123.186 N / A Exécution du deuxième site Web

Les deux sites Web différents en cours d'exécution ont des noms de domaine première guerre mondiale.ranvirslog.com et seconde guerre mondiale.ranvirslog.com et leurs deux enregistrements A pointent vers l'adresse IP publique du proxy inverse, je.e, 159.89.108.14

L'idée derrière l'IP privée est que les trois VM peuvent se parler via cette IP privée, mais un utilisateur distant ne peut accéder qu'à la VM proxy inverse à son IP publique. Ceci est important de garder à l'esprit. Par exemple, vous ne pouvez pas ssh dans l'une des VM en utilisant son IP privée.

De plus, Node-1 et Node-2 ont un serveur Web Apache desservant deux pages Web distinctes. Cela nous aidera à distinguer les uns des autres.

Le premier site Web indique « LE SITE WEB 1 FONCTIONNE!!!"

De même, le deuxième site Web montre ceci :

Vos sites Web peuvent différer, mais si vous souhaitez répliquer cette configuration comme point de départ, exécutez apt install apache2 sur Node-1 et Node-2. Puis éditez le fichier /var/www/html/index.html pour que le serveur Web dise ce que vous voulez qu'il dise.

La VM reverseproxy est toujours intacte. Toutes les machines virtuelles exécutent Ubuntu 18.04 LTS, mais vous êtes libre d'utiliser n'importe quel autre système d'exploitation que vous voulez. Vous pouvez même émuler cela en utilisant des conteneurs Docker. En créant un réseau de pont Docker défini par l'utilisateur et en créant des conteneurs dessus, vous pouvez attribuer à chaque conteneur une adresse IP privée et transférer tous les proxy HTTP/HTTPS vers un conteneur, qui serait notre conteneur de proxy inverse Nginx.

Jusqu'ici tout va bien.

Configuration par défaut de Nginx

Commençons par installer Nginx sur le serveur reverseproxy, j'utilise Ubuntu donc apt est mon gestionnaire de paquets :

$ sudo apt installer nginx

Suppression de la configuration par défaut si vous utilisez une distribution basée sur Debian

Avant d'aller plus loin une petite note sur la configuration de Nginx. Tous les différents fichiers de configuration sont stockés dans /etc/nginx, y compris le nginx.conf qui est le fichier de configuration principal. Si nous regardons le contenu de ce fichier (à l'intérieur du bloc http), vous remarquerez les deux lignes suivantes :


inclure /etc/nginx/conf.ré/*.conf ;
inclure /etc/nginx/sites-enabled/*;

La deuxième ligne inclut tous les fichiers du répertoire sites-enabled dans la configuration de Nginx. C'est la pratique standard sur la plupart des distributions basées sur Debian. Par exemple, la page Web par défaut « Bienvenue sur Nginx » a un fichier correspondant nommé par défaut à l'emplacement /etc/nginx/sites-available/default avec un lien symbolique vers /etc/nginx/sites-enabled/, mais nous n'en avons pas besoin page Web par défaut afin que nous puissions supprimer le lien symbolique en toute sécurité. L'original est toujours disponible dans le répertoire des sites disponibles.

$ rm /etc/nginx/sites-enabled/default

Mais lorsque nous créerons une configuration de proxy inverse, nous le ferons en conf.d (avec notre nom de fichier ayant un .conf extension) c'est universel, et fonctionne sur toutes les distributions, pas seulement Debian ou Ubuntu.

Suppression de la configuration par défaut pour d'autres distributions

Si vous n'utilisez pas de distribution basée sur Debian, vous trouverez la valeur par défaut Page d'accueil configuration dans /etc/nginx/conf.d/défaut.conf déplacez simplement le fichier dans un endroit sûr si vous souhaitez l'utiliser à l'avenir (puisque ce n'est pas un lien symbolique)

$ mv /etc/nginx/conf.d/défaut.conf ~/défaut.conf

Il peut parfois être trouvé dans /etc/nginx/default.d parce que les gens ne peuvent tout simplement pas s'entendre sur une seule norme simple! Il faudrait donc que vous fassiez un peu de recherche dans le répertoire /etc/nginx, pour comprendre cela.

Ajout de blocs de proxy inverse

Comme indiqué précédemment, les deux noms de domaine différents que j'héberge derrière ce proxy sont

  1. ranvirslog.com (SITE WEB 1) avec IP 10.135.123.183
  2. ranvirslog.com (SITE WEB 2) avec IP 10.135.123.186

Créons donc un fichier par site Web dans /etc/nginx/conf.d/ dossier. Nous sommes donc bien organisés.

$ touch /etc/nginx/conf.j/ww1.conf
$ touch /etc/nginx/conf.j/ww2.conf

Vous pouvez nommer les fichiers comme vous le souhaitez, tant qu'il a un .conf à la fin de son nom.

Dans le premier fichier ww1.conf ajoutez les lignes suivantes :

serveur
écouter 80 ;
écoutez [::]:80;
 
nom_serveur ww1.ranvirslog.com;
 
emplacement /
proxy_pass http://10.135.123.183/;
proxy_buffering désactivé ;
proxy_set_header X-Real-IP $remote_addr;

Les instructions d'écoute indiquent à Nginx d'écouter sur le port 80 pour les cas IPv4 et IPv6. Il vérifie ensuite si le server_name est ww1.ranvirslog.com, le bloc de localisation entre en jeu et transmet la demande à http://10.135.123.183/ avec mise en mémoire tampon désactivée. De plus, la ligne proxy_set_header… garantit que l'adresse IP d'origine du client est transmise au serveur proxy. Ceci est utile si vous souhaitez calculer le nombre de visiteurs uniques, etc. Sinon, le serveur proxy n'aurait qu'un seul visiteur - le serveur Nginx.

L'option de mise en mémoire tampon et les options set_header sont complètement facultatives et sont simplement ajoutées pour rendre le proxy aussi transparent que possible. Pour la seconde guerre mondiale.ranvirslog.com, j'ai ajouté la configuration suivante dans /etc/nginx/conf.j/ww2.conf :

serveur
écouter 80 ;
écoutez [::]:80;
 
nom_serveur ww2.ranvirslog.com;
 
emplacement /
proxy_pass http://10.135.123.186/;
proxy_buffering désactivé ;
proxy_set_header X-Real-IP $remote_addr;

Enregistrez les deux fichiers et testez si la configuration globale est valide ou non :

$ sudo nginx -t

S'il y a des erreurs, la sortie de la commande ci-dessus vous aidera à les trouver et à les corriger. Redémarrez maintenant le serveur :

$ service nginx redémarrer

Et vous pouvez tester si cela a fonctionné ou non en visitant les différents noms de domaine dans votre navigateur et en voyant le résultat.

Conclusion

Le cas d'utilisation de chaque individu est différent. La configuration mentionnée ci-dessus peut nécessiter quelques ajustements pour fonctionner pour votre scénario. Peut-être que vous exécutez plusieurs serveurs sur le même hôte, mais sur des ports différents, dans ce cas la ligne proxy_pass… aura http://localhost:portNumber/ comme valeur.

Ces détails dépendent beaucoup de votre cas d'utilisation. Pour plus de détails sur les autres options et paramètres réglables, consultez la documentation officielle de Nginx.

Meilleures applications de mappage de manette de jeu pour Linux
Si vous aimez jouer à des jeux sur Linux avec une manette de jeu au lieu d'un système de saisie clavier et souris typique, il existe des applications ...
Outils utiles pour les joueurs Linux
Si vous aimez jouer à des jeux sur Linux, il est probable que vous ayez utilisé des applications et des utilitaires comme Wine, Lutris et OBS Studio p...
Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...