Fermer

septembre 26, 2018

Comment configurer un proxy NGINX inversé sur Alibaba Cloud –


Cet article a été créé en partenariat avec Alibaba Cloud . Merci de soutenir les partenaires qui rendent SitePoint possible.

Pensez-vous avoir un meilleur conseil pour tirer le meilleur parti des services Alibaba Cloud? Parlez-en nous et courez la chance de gagner un Macbook Pro (plus d'autres trucs sympas). Pour en savoir plus, cliquez ici .

Vous devez servir de nombreux sites Web à partir d'une seule machine Linux, optimiser les ressources et automatiser le processus de lancement du site? Soyons sérieux à ce moment-là, et configurons un environnement prêt pour la production en utilisant Ubuntu, NGINX et Docker – le tout sur Alibaba Cloud.

Comprendre le scénario

Si vous consultez ce guide, il est probable que vous devez gérer un cluster de serveurs ou un nombre croissant de sites Web – sinon les deux – et étudiez quelles sont vos options pour un environnement sécurisé, performant et flexible. Eh bien, vous êtes au bon endroit!

Pourquoi un proxy inverse

En résumé, un proxy inverse reçoit une requête d'un client (normalement d'Internet) et la transmet à un serveur capable de le satisfaire (

 Reverse proxy

Ceux qui adressent des requêtes au proxy peuvent ne pas connaître le réseau interne.

Donc, le serveur renvoie la réponse au client. le proxy inverse est la «face publique» située au bord du réseau de l'application, gérant toutes les requêtes; il est donc en quelque sorte similaire à un équilibreur de charge. Mais, bien que l'implémentation d'un équilibreur de charge ne soit utile que lorsque vous avez plusieurs serveurs, vous pouvez déployer un proxy inverse avec un seul serveur Web hébergeant plusieurs sites. Cela peut s'avérer particulièrement utile lorsque ces sites requièrent des configurations différentes. sont quelques avantages à cette approche:

  • Performance . Un certain nombre de techniques d'accélération Web pouvant être mises en œuvre, notamment:
    • Compression : les réponses du serveur peuvent être compressées avant de les renvoyer au client pour réduire la bande passante.
    • Terminaison SSL : le déchiffrement des requêtes et le chiffrement des réponses peuvent libérer des ressources sur le serveur
    • Caching : le fait de renvoyer des copies de contenu stockées lorsque la même demande est placée par un autre client peut réduire le temps de réponse et le chargement sur le serveur principal.
  • Sécurité . Les clients malveillants ne peuvent pas accéder directement à vos serveurs Web, le proxy agissant efficacement comme moyen de défense supplémentaire. et le nombre de connexions peut être limité, ce qui minimise l'impact des attaques par déni de service distribué (DDoS).
  • Flexibilité . Une seule URL peut être le point d'accès à plusieurs serveurs, quelle que soit la structure du réseau derrière eux. Cela permet également de répartir les demandes, en maximisant la vitesse et en évitant les surcharges. Les clients ne connaissent également que l'adresse IP du proxy inverse, ce qui vous permet de modifier en toute transparence la configuration de votre back-end en fonction de vos besoins en matière de trafic ou d'architecture.

Pourquoi NGINX

 Logo NGINX

NGINX Plus et NGINX sont les meilleures solutions de proxy inversé utilisées par les sites Web à fort trafic tels que Dropbox, Netflix et Zynga. Plus de 287 millions de sites Web dans le monde, y compris la majorité des 100 000 sites Web les plus fréquentés comptent sur NGINX Plus et NGINX pour diffuser leur contenu rapidement, de manière fiable et sécurisée. ] Qu'est-ce qu'un serveur proxy inverse? by NGINX.

Apache est idéal pour ce qu'il est pour – un serveur Web multifonction, toutes batteries incluses. Mais pour cette raison même, il peut également être plus gourmand en ressources. En outre, Apache est multi-thread même pour des sites Web uniques, ce qui n'est pas une mauvaise chose en soi, en particulier pour les systèmes multi-core, mais cela peut ajouter beaucoup de temps à L'hébergement de plusieurs sites.

Il est possible de modifier les performances d'Apache, mais cela demande du temps et des connaissances. NGINX adopte l’approche opposée dans sa conception – un serveur Web minimaliste que vous devez modifier pour ajouter plus de fonctionnalités, ce qui est juste, prend également un certain sens.

En bref, NGINX bat le temps loin d’Apache -la performance de la boîte et de la consommation de ressources. Pour un site unique, vous pouvez choisir de ne même pas vous soucier, sur un cluster ou lors de l'hébergement de nombreux sites, NGINX fera sûrement une différence .

Pourquoi Alibaba Cloud

Une partie du groupe Alibaba (Alibaba.com, AliExpress), Alibaba Cloud existe depuis près d'une décennie au moment d'écrire ces lignes. Il s'agit de le plus grand fournisseur de services de cloud public en Chine et le tiers du monde ; ce n'est donc pas exactement un «nouveau joueur» dans le domaine des services de cloud computing.

Cependant, ce n'est que récemment que Alibaba s'est résolument éloigné des marchés chinois et asiatique pour plonger dans le «monde occidental» . C'est une offre complète: calcul élastique, services de base de données, stockage et CDN, service d'application, domaine et site Web, sécurité, mise en réseau, analyse, Alibaba Cloud couvre tout . 19659006] Vous aurez besoin d'un compte Alibaba Cloud avant de pouvoir configurer votre machine Linux. Et la bonne nouvelle est que vous pouvez en obtenir un gratuitement! Pour plus de détails, reportez-vous à Comment s'inscrire et démarrer .

Pour ce guide, vous utiliserez Ubuntu Linux, vous pouvez donc voir le Comment configurer votre premier serveur Ubuntu 16.04 sur Alibaba Cloud ) guide. Rappelez-vous, vous pouvez utiliser Debian CentOS et, de fait, vous pouvez vérifier 3 façons de configurer un serveur Linux sur Alibaba Cloud .

Une fois que vous avez obtenu votre compte Alibaba Cloud et que votre machine Linux est opérationnelle, vous êtes prêt à partir.

Hands On!

Installation de NGINX

Si nous voulions utiliser le processus entier, nous devrions d'abord installer NGINX.

Sur Ubuntu, nous utiliserions les commandes suivantes:

 $ sudo apt-get update
$ sudo apt-get install nginx

Et vous pouvez vérifier l'état du serveur web avec systemctl :

 $ systemctl status nginx

Avec systemctl vous pouvez également arrêter / début / redémarrer le serveur, et activer / désactiver le lancement de NGINX au démarrage.

Voici les deux principaux répertoires qui nous intéressent:

  • / var / www / html Emplacement par défaut du site Web NGINX.
  • / etc / nginx Répertoire de configuration NGINX.

Maintenant, la configuration d'un proxy inverse peut être un peu compliquée, car nous devons passer par un certain nombre de paramètres réseau et les fichiers à mettre à jour lorsque nous ajoutons des sites /

Autrement dit, à moins d’automatiser le tout à l’aide de conteneurs logiciels…

Docker to the Rescue

Avant de pouvoir utiliser des conteneurs logiciels pour automatiser notre flux de travail, nous Nous devons d'abord installer Docker, qui pour Ubuntu est un processus assez simple.

Désinstallez toute ancienne version:

 $ su do apt-get remove docker-engine docker docker.io

Installez la dernière version de Docker CE:

 $ sudo apt-get update
$ sudo apt-get install docker-ce

Si vous souhaitez installer une version Docker spécifique ou configurer le référentiel Docker, voir Get Docker CE for Ubuntu .

Configuration du réseau

définir correctement les règles de mise en réseau.

Créons donc un réseau avec Docker:

 $ docker network create nginx-proxy

Et croyez ou non, le réseau est configuré!

NGINX-Proxy!

Maintenant que Docker est exécuté sur notre serveur Ubuntu, nous pouvons rationaliser le processus d'installation, de configuration du proxy inverse.

Jason Wilder a fait un travail impressionnant en assemblant une image Docker qui fait exactement cela – jwilder / nginx-proxy un proxy NGINX automatisé pour les conteneurs Docker utilisant docker- gen qui fonctionne parfaitement

Voici comment exécuter le proxy:

 $ docker run -d -p 80:80 -p 443: 443 --name nginx- proxy --net nginx-proxy -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder / nginx-proxy

Essentiellement:

  • nous avons demandé à Docker d'exécuter NGINX en tant que démon / service ( -d ),
  • a mappé les ports HTTP et HTTPS du proxy (80 et 443) du serveur Web (s). ) ports derrière elle ( -p 80:80 -p 443: 443 ),
  • a nommé le proxy NGINX pour référence future ( - nom nginx-proxy ), [19659068] a utilisé le réseau précédemment défini ( - net nginx-proxy ),
  • a mappé le socket UNIX que le démon Docker écoute pour l'utiliser sur le réseau ( -v / var /run/docker.sock:/tmp/docker.sock:ro).

Et croyez ou non, le proxy inverse NGINX est opérationnel!

Lancement de sites, de nombreux sites [19659008] Normalement, lorsque vous utilisez Docker, vous lanceriez une application «conteneurisée», étant un site WordPress standard, une configuration Moodle spécifique ou vos propres images avec vos propres applications personnalisées.

Lancer un conteneur proxy maintenant est aussi simple que de spécifier le virtuel votre dom ain with VIRTUAL_HOST = sous-domaine.votredomaine.com :

 $ docker run -d --net nginx-proxy -e VIRTUAL_HOST = sous-domaine.votredomaine.com --name nom_site your_docker_image

your_docker_image peut être un site WordPress, votre propre application Web, etc.

Et croyez-le ou non, votre application Web est en ligne!

Qu'est-ce qui vient de se passer. jwilder / nginx-proxy a pris soin de créer tous les fichiers de configuration NGINX en utilisant le nom d'hôte fourni et d'effectuer tout le routage réseau nécessaire vers le conteneur de logiciels exécutant votre application; tout cela avec une seule ligne bash – n'est-ce pas fou?

Notez que l'adresse IP que vous utiliserez pour accéder à vos applications Web sera toujours la même, le routage interne et la configuration de vos sites ont déjà été effectués. Il suffit de vous assurer que vous avez bien mappé vos domaines et sous-domaines sur le proxy.

Pour ceux d'entre vous qui sont des utilisateurs puissants de Docker, nous pouvons aller plus loin avec Docker. Compose.

Tout rassembler dans un fichier docker-compose.yml :

 version: "2"

prestations de service:
  nginx-proxy:
    image: jwilder / nginx-proxy
    réseaux:
      - nginx-proxy
    ports:
      - "80:80"
      - "443: 443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nom de l'application:
    nom_conteneur: votre_nom_app
    image: your_docker_image
    environnement:
      - VIRTUAL_HOST: sous-domaine.votredomaine.com
    réseaux:
      - nginx-proxy

réseaux:
  nginx-proxy:
    externe:
      nom: nginx-proxy
  arrière:
    conducteur: pont

En outre, avec Docker Compose, vous pouvez également définir à peu près toutes les infrastructures dont vous avez besoin: bases de données, toutes vos applications ayant chacune leur propre configuration Apache / NGINX, etc. vous pouvez trouver plus d'informations dans Aperçu de Docker Compose .

Ressources

Au sujet de Alibaba Cloud :

Au sujet de NGINX :

Docker :

En résumé

Nous venons d'accomplir quelque chose de très complexe: une infrastructure capable de gérer des centaines de sites à partir d'un seul point d'entrée, en mettant l'accent sur l'optimisation des ressources et un pipeline automatisé. . Bravo!

Comme nous l'avons mentionné, les proxys inversés peuvent être juste le point de départ lors de la mise en œuvre de équilibrage de charge serveur (SLB), un pare-feu d'application et même réseau de distribution de contenu (CDN).




Source link