Site icon Blog ARC Optimizer

Configuration de Nginx et SSL avec Node.js


NGINX est un serveur HTTP hautes performances ainsi qu'un proxy inverse . Contrairement aux serveurs traditionnels, NGINX suit une architecture asynchrone pilotée par les événements. Par conséquent, l'empreinte mémoire est faible et les performances sont élevées. Si vous exécutez une application Web basée sur Node.js, vous devriez sérieusement envisager d'utiliser NGINX comme proxy inverse.

NGINX peut être très efficace pour servir des ressources statiques. Pour toutes les autres demandes, il communiquera avec votre backend Node.js et enverra la réponse au client. Dans ce didacticiel, nous allons voir comment configurer NGINX pour fonctionner avec Node.js. Nous verrons également comment configurer SSL sur le serveur NGINX.

Remarque: Le nœud possède également un module HTTPS intégré et peut être configuré pour lire les fichiers de certificat nécessaires sans avoir besoin d'un proxy inverse. Vous pouvez en savoir plus à ce sujet dans notre article Comment utiliser SSL / TLS avec Node.js .

Installation de NGINX

En supposant que Node.js soit déjà installé sur votre machine (sinon, vérifiez ici ), voyons comment installer NGINX.

Installation sous Linux

Si vous utilisez Ubuntu, vous pouvez utiliser la commande suivante pour installer NGINX:

 sudo apt-get mise à jour
sudo apt-get install nginx

Si vous exécutez une distribution Linux autre qu'Ubuntu, consultez les documents d'installation de NGINX pour plus d'informations.

NGINX démarrera automatiquement une fois installé.

Installation sur macOS [19659007] Si vous êtes sous macOS, vous pouvez utiliser Homebrew pour installer NGINX facilement. Les étapes sont les suivantes:
  • Homebrew a besoin que le répertoire / usr / local soit chown ’d à votre nom d’utilisateur. Donc, exécutez d'abord la commande suivante dans le terminal:

     sudo chown -R 'username here' / usr / local
    
  • Les deux commandes suivantes vont maintenant installer NGINX sur votre système:

     brew link pcre
    installer brew nginx
    
  • Une fois l'installation terminée, vous pouvez taper la commande suivante pour démarrer NGINX:

     sudo nginx
    
  • Le fichier de configuration NGINX se trouve ici: /usr/local/etc/nginx/nginx.conf .

Installation sur Windows

Pour Windows, rendez-vous sur le NGINX télécharge la page et récupère le zip. L'étape suivante consiste à décompresser l'archive et à passer au répertoire dans l'invite de commande comme suit:

 décompressez nginx-1.3.13.zip
cd nginx-1.3.13
démarrer nginx

Comme vous pouvez le voir, la commande start nginx démarrera NGINX.

Maintenant que l'installation est terminée, voyons comment configurer un serveur simple.

Configuration d'un nœud. js Server

Commençons par créer un simple serveur Node.js. Nous allons commencer par lancer un projet et installer le package Express :

 mkdir node-demo && cd node-demo
npm init -y
npm j'exprime

Créez un fichier appelé server.js avec le contenu suivant:

 const express = require ('express')
const app = express ()
port const = 3000

app.get ('/', (req, res) => res.send ('Hello World!'))

app.listen (port, () => console.log (`Exemple d'application écoutant sur le port $ {port}!`))

Vous pouvez démarrer le serveur en exécutant node server.js .

Configuration de NGINX

Ouvrons maintenant le fichier de configuration de site par défaut NGINX:

 sudo nano / etc / nginx / sites disponibles / par défaut

Si vous le souhaitez, vous pouvez accéder directement au répertoire et ouvrir le fichier de configuration avec votre éditeur de texte préféré.

En faisant défiler vers le bas, vous trouverez un bloc serveur . Cela ressemble à ceci:

 serveur {
  écouter 80;
  nom_serveur localhost;

  ....
  plus de config va ici
}

Ensuite, nous allons configurer le bloc serveur en fonction de nos besoins. Nous voulons configurer NGINX pour transmettre toutes les demandes à notre serveur Node.js. Remplacez le bloc serveur ci-dessus par un nouveau bloc comme indiqué ci-dessous:

 serveur {
  écouter 80;
  nom_serveur localhost;

  emplacement / {
    proxy_pass http: // localhost: 3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $ http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $ host;
    proxy_cache_bypass $ http_upgrade;
  }
}

Comme vous pouvez le voir, le serveur Web écoutera sur le port http: // localhost 80 . Le bloc location / indique à NGINX quoi faire avec toute demande entrante. Nous utilisons proxy_pass pour pointer vers notre application Node.js, qui s'exécute à http: // localhost: 3000 dans notre cas.

À ce stade, vous devez enregistrer le fichier et tapez ce qui suit pour redémarrer NGINX, en fonction de votre système d'exploitation.

Ubuntu:

 sudo service nginx restart

Ou:

 sudo /etc/init.d/nginx restart

macOS:

 sudo nginx -s stop && sudo nginx

Windows:

 nginx -s rechargement

Une fois cela fait, vous pouvez aller sur http: // localhost pour voir notre proxy en action. Bien que vous accédiez au serveur Web NGINX, vous obtiendrez la réponse réelle du serveur Node.js.

Remarque: vous devrez vous assurer qu'il n'y a rien d'autre (comme Apache) en cours d'exécution sur le port 80.

Configuration de SSL

Afin de créer une connexion sécurisée avec le navigateur d'un utilisateur, nous devons obtenir un certificat numérique. Normalement, vous en obtenez un auprès d'une autorité de certification telle que Let's Encrypt . Si vous suivez la route Let's Encrypt, assurez-vous d'installer le certificat à l'aide de Certbot qui se chargera de reconfigurer NGINX pour vous.

Pour le développement local (et pour suivre ce didacticiel), vous pouvez crée également un certificat auto-signé . Le seul problème est que les navigateurs afficheront un avertissement indiquant que le «certificat n'est pas approuvé» lorsque quelqu'un visite votre site Web. Mais pour les tests sur votre machine locale, c'est très bien.

Une fois que vous avez un certificat et une clé privée, vous pouvez configurer SSL dans NGINX. Vous devez modifier notre bloc serveur précédent comme suit:

 server {
  écouter 80;
  écouter 443 ssl;
  nom_serveur localhost;

  ssl_certificate /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;

  emplacement / {
    proxy_pass http: // localhost: 3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $ http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $ host;
    proxy_cache_bypass $ http_upgrade;
  }
}

C'est tout!

Maintenant, si vous accédez à https: // localhost votre connexion sera sécurisée. La configuration ci-dessus suppose que le certificat et la clé privée se trouvent respectivement dans /etc/nginx/ssl/server.crt et /etc/nginx/ssl/server.key mais vous

Bonus: Serving Static Assets

Un avantage supplémentaire de la configuration de NGINX devant notre serveur Node.js est que nous pouvons facilement le configurer pour servir tous les actifs statiques de notre application. a besoin. Cela évitera de surcharger le traitement de ces demandes de traitement de noeud.

Pour ce faire, nous devons ajouter un nouveau bloc d'emplacement à la configuration du serveur:

 server {
  écouter 80;
  nom_serveur localhost;

  emplacement / {
    ...
  }

  emplacement / public {
    root / usr / local / var / www;
  }
}

Dans ce bloc de emplacement nous définissons la racine sur / usr / local / var / www mais vous pouvez choisir un répertoire différent si vous le souhaitez. Par conséquent, chaque fois qu'il y a une demande à quelque chose comme http: //localhost/public/somepath/file.html NGINX servira le fichier de / usr / local / var / www / public /somepath/file.html directement.

Conclusion

Dans ce bref didacticiel, nous avons vu comment utiliser NGINX comme proxy inverse pour notre application Node.js et configurer SSL. En utilisant NGINX pour gérer les ressources statiques, vous pouvez également réduire la charge de votre application Node.




Source link
Quitter la version mobile