Comment configurer le serveur Web Nginx sur Ubuntu 18.04 Bionic Beaver Linux

Comment configurer le serveur Web Nginx sur Ubuntu 18.04 Bionic Beaver Linux

Objectif

Apprenez à installer et à configurer le serveur Web Nginx sur Ubuntu 18.04 castor bionique

Exigences

  • Autorisation

Conventions

  • # - nécessite que les commandes Linux soient exécutées avec des privilèges racine
    directement en tant qu'utilisateur racine ou en utilisant Sudo commande
  • $ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Autres versions de ce tutoriel

Ubuntu 20.04 (Focal Fossa)

Introduction

Le serveur Web Nginx, avec Apache, est l'un des serveurs Web les plus connus et les plus utilisés au monde. Il est généralement moins avide de ressources qu'apache, et peut également être utilisé comme proxy inversé.

Dans ce tutoriel, nous verrons comment installer et configurer le serveur Web Nginx sur Ubuntu 18.04 castor bionique.

Étape 1 - Installation

Installation de Nginx sur Ubuntu 18.04 est très facile, nous avons juste besoin d'utiliser apt-get:

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

La première commande synchronise notre machine avec les référentiels Ubuntu, tandis que le second installe réellement le package Nginx. Quelques secondes et le serveur sera installé sur notre système. Les scripts d'installation prendront également en charge le démarrage du service Nginx.

Nous pouvons facilement vérifier que le service s'exécute en utilisant la commande Linux suivante:

$ sudo systemctl IS-active nginx

La commande ci-dessus reviendra actif Si le service est en place: en effet, si nous pointé le navigateur vers l'adresse du serveur, ou vers hôte local Si nous opérons à partir de la machine elle-même, nous devons visualiser la page de bienvenue Nginx:

Page de bienvenue nginx

Étape 2 - Configuration du pare-feu

Pour faire en sorte que notre serveur puisse servir des pages à d'autres machines, nous devons configurer le pare-feu pour permettre le trafic entrant via le port 80 (la valeur par défaut) et le port 443 Si nous voulons utiliser le https protocole. La commande exacte pour s'exécuter pour y parvenir dépend du gestionnaire de pare-feu utilisé sur la machine, mais ici je suppose que le ufw est en cours d'exécution, car c'est la valeur par défaut sur Ubuntu.

Tout d'abord, nous vérifions que le pare-feu est actif:

$ sudo ufw statut

Si ce n'est pas, vous pouvez l'activer en exécutant la commande Linux suivante:

$ sudo ufw activer

Cependant, soyez prudent lorsque, car comme le système vous en informera, l'activation du pare-feu pourrait détruire les connexions existantes. Pour permettre des connexions entrantes via le port 80, nous devons courir:

$ sudo ufw autoriser 80 / TCP

Pour autoriser le port 443, à la place:

$ sudo ufw autoriser 443 / TCP

Enfin, pour visualiser l'état actuel du pare-feu, nous pouvons fonctionner:

$ sudo ufw status numérotés: actif à l'action de - ------ ---- [1] 443 / TCP Autoriser n'importe où [2] 80 / TCP Autoriser n'importe où [3] 443 / TCP (V6) Autoriser n'importe où (V6) [4] 80 / TCP (V6) Autoriser n'importe où (V6) 

Comme vous pouvez le voir, la commande ci-dessus nous donnera un aperçu des règles configurées, indexées par numéro.

Blocs de serveur Nginx (hôtes virtuels)

Les blocs de serveur Nginx sont l'équivalent d'Apache VirtualHosts et sont utilisés pour exécuter plus d'un site sur la même machine serveur. Sur une installation standard de nginx, nous pouvons trouver la valeur par défaut bloc de serveur est / etc / nginx / sites-disponible / par défaut. Jetons un coup d'œil:

# Configuration du serveur par défaut # Server écouter 80 default_server; écouter [::]: 80 default_server; [… .] root / var / www / html; # Ajouter un index.PHP à la liste si vous utilisez l'index PHP.index html.index HTM.nginx-debian.html; nom du serveur _; Emplacement / # Tentez d'abord de servir la demande de fichier, puis # comme répertoire, puis reposez-vous à l'affichage d'un 404. try_files $ uri $ uri / = 404;  [… .] 
Copie

Celui ci-dessus est une version rationalisée (je viens de supprimer les commentaires) du bloc de serveur Nginx par défaut sur Ubuntu 18.04. Comme vous pouvez le voir, chaque directive se termine par un point-virgule. La première chose que nous voyons à l'intérieur du Serveur La section, sur les lignes 4-5, sont les écouter directives. Le premier est pour ipv4 tandis que le second pour ipv6. En fait, cela pourrait être raccourci comme écouter [::]: 80 ipv6only = off.

Le default_server La directive définit ce bloc de serveur comme la par défaut, ce qui signifie qu'elle sera utilisée si aucune autre configuration ne correspond à un nom demandé. Cette directive ne peut être utilisée que sur un bloc de serveur à la fois.

Le racine Directive on Line 8 définit le chemin vers le répertoire racine du site qui sera servi par le bloc: c'est essentiellement l'équivalent d'Apache Document de document.

Le indice La directive sur la ligne 11 définit les fichiers qui peuvent être utilisés comme index. Les fichiers seront vérifiés dans l'ordre.

Sur la ligne 13, le nom du serveur La directive est utilisée pour définir le nom du serveur à affecter à la configuration et détermine le bloc de serveur qui traitera la demande. Lors de la définition du nom du serveur, il est possible d'utiliser les caractères génériques et les expressions régulières. Dans ce cas, la valeur fournie est _: Ceci est utilisé parce que c'est une valeur non valide, et ne correspondra jamais à aucun nom d'hôte réel (n'oubliez pas que cette configuration est un fourre-tout).

Enfin, nous avons le emplacement Directive On Line 15: Il modifie la façon dont une demande est traitée dans le bloc du serveur. Dans ce cas, le chemin à égaler pour que les instructions aient lieu, / /. La partie de l'URI à faire correspondre est celle après le segment de l'hôte.

À l'intérieur de l'emplacement «Strophe», à la ligne 18, nous pouvons observer une autre directive, try_files: il vérifie l'existence de fichiers dans l'ordre spécifié, en utilisant le premier trouvé pour répondre à la demande. Dans ce cas, comme le suggère le commentaire dans la section, il essaie d'abord de faire correspondre un fichier, qu'un répertoire. Si rien satisfait la demande, une page 404 sera affichée à l'utilisateur. Notez que la demande est représentée comme le $ uri variable, et ce qui le définit comme un répertoire est la barre de fin.



Définition d'un bloc de serveur personnalisé

Nous devrions maintenant créer un bloc de serveur personnalisé pour servir un site HTML. En première chose, nous créerons le répertoire qui servira de racine de document pour le bloc, appelons-le exemple:

$ sudo mkdir / var / www / exemple

Nous devons également créer un index.Page HTML à afficher lorsque nous atteignons le site:

$ echo "Bienvenue à l'exemple!"| Sudo Tee / var / www / Exemple / index.html> / dev / null

Une fois cela fait, nous pouvons créer un bloc de serveur dans le / etc / nginx / sites disponible Répertoire, pour la cohérence, nous le nommerons «Exemple»:

Server écouter 80; root / var / www / exemple; Index index.html; server_name www.exemple.lan;  
Copie

Pour tester que notre configuration est correcte et ne contient aucune erreur de syntaxe, nous pouvons exécuter la commande Linux suivante:

$ sudo nginx -t

Maintenant, comme nous n'avons pas de serveur DNS en place, pour envoyer une demande à notre serveur avec le nom spécifié, nous devons ajouter une entrée dans le / etc / hôtes fichier de la machine client. Dans ce cas, l'adresse de la machine que j'utilise comme serveur (dans un environnement hôte virtuel) 192.168.122.89, donc:

# Le fichier client / etc / hosts [… .] 192.168.122.89 www.exemple.lan 
Copie

Avant d'activer notre nouveau bloc de serveurs, nous avons la possibilité de vérifier que la configuration par défaut fonctionne en effet comme un coup par défaut. Si nous naviguons maintenant vers «www.exemple.LAN »De la machine client où nous venons d'ajouter l'entrée des hôtes, nous pouvons voir que le serveur répondra à notre demande avec la page Nginx par défaut (puisque le nouveau bloc n'est pas encore activé).

Pour activer notre bloc de serveur, nous devons créer un lien symbolique à partir de la configuration dans laquelle nous avons écrit / etc / nginx / sites disponible pour / etc / nginx / sites compatible:

$ sudo ln -s / etc / nginx / sites-disponible / exemple / etc / nginx / sites compatible

Après cela, nous devons redémarrer Nginx:

$ sudo systemctl redémarrer nginx

À ce stade, si nous naviguons vers «www.exemple.LAN », nous devrions voir notre page pas très compliquée:

Exemple de page par défaut

Utilisation de SSL

Pour utiliser SSL, nous avons essentiellement deux options: obtenir un certificat auprès d'une autorité de certificat, ou utiliser un certificat auto-signé. Dans notre premier exemple, nous allons générer un certificat par nous-mêmes. Exécutez la commande Linux suivante pour continuer:

$ sudo openssl req -x509 \ -days 365 \ -sha256 \ -newkey rsa: 2048 \ -nodes \ -Keyout / etc / ssl / private / exemple.Key \ -out / etc / ssl / certs / example-cerred.pem 
Copie

Avec cette commande, nous avons généré un certificat auto-signé valide pour 365 jours et une clé RSA de 2048 bits. Le certificat et la clé seront enregistrés dans / etc / ssl / certs / example-certe.pem et / etc / ssl / privé / exemple.clé fichiers respectivement. Répondez simplement aux questions qui seront posées, en accordant une attention particulière Fqdn: il doit correspondre au domaine qui utilisera le certificat pour qu'il fonctionne correctement.

Vous êtes sur le point d'être invité à saisir des informations qui seront intégrées à votre demande de certificat. Ce que vous êtes sur le point d'entrer, c'est ce qu'on appelle un nom distingué ou un DN. Il y a pas mal de champs mais vous pouvez laisser un peu de blanc pour certains champs, il y aura une valeur par défaut, si vous entrez '.', Le champ sera laissé vide. ----- Nom du pays (code de 2 lettres) [AU]: Nom de l'état ou de la province (nom complet) [Some-State]: Nom de la localité (par exemple, ville) []: Nom de l'organisation Milan (par exemple, société) [Internet Widgits Pty Ltd] : Damage Inc. Nom de l'unité organisationnelle (par exemple, section) []: nom commun (e.g. serveur fqdn ou votre nom) []: www.exemple.Adresse e-mail LAN []: 

Maintenant que nous avons notre certificat et notre clé, nous devons modifier notre configuration de bloc de serveur, afin qu'elle devienne:

Server écouter 443 SSL; server_name www.exemple.lan; ssl_certificate / etc / ssl / certs / example-cerret.pem; ssl_certificate_key / etc / ssl / private / exemple.clé; root / var / www / exemple; Index index.html;  
Copie

Comme vous pouvez le voir, nous avons modifié le écouter Directive à la ligne 2, en utilisant le port 443 et permettant également le SSL Paramètre, nous avons ensuite ajouté deux nouvelles directives, aux lignes 4-5: ssl_certificate et ssl_certificate_key, qui pointent respectivement au certificat et à l'emplacement clé du certificat.

Après avoir redémarré le service Nginx, si nous naviguons maintenant vers https: // www.exemple.lan Nous devrions voir l'avertissement émis par le navigateur, car le certificat est auto-signé. Néanmoins, nos configurations fonctionnent et nous utilisons une connexion cryptée:

Avertissement de certificat non valide

Utiliser Let's Encrypt

L'alternative aux certificats auto-signés est les certificats délivrés par un tiers vérifié. Bien que nous puissions acheter un certificat auprès d'une autorité de certificat, nous avons également la possibilité d'utiliser «Let's Encrypt!".

«Let's Encrypt» est lui-même une autorité de certificat libre et ouverte qui nous permet d'obtenir automatiquement un certificat de confiance par le navigateur en utilisant le ACMÉ protocole et un agent de gestion de certificat qui s'exécute sur le serveur. La seule condition est de pouvoir démontrer que nous avons le contrôle du domaine que nous voulons utiliser le certificat pour.

Pour utiliser le service, la première chose à faire est d'installer le Certbot Client ACME et le plugin spécifique à Nginx:

$ sudo apt-get update && apt-get install certbot python-certbot-nginx

L'obtention d'un certificat est assez simple:

$ sudo certbot --nginx -m -d 

De toute évidence, pour que cela fonctionne, le domaine doit pointer correctement vers notre IP de serveur accessible au public. CERTBOT nous incitera à répondre à certaines questions afin de modifier la configuration du site, et si tout se passe bien, le certificat et la clé seront enregistrés dans le / etc / lesencrypt / live / annuaire. CERTBOT appliquera également les modifications nécessaires au bloc du serveur et rechargera le service.

Conclusions

Nous avons installé le serveur Web Nginx sur Ubuntu 18.04, vu comment ouvrir les ports de pare-feu nécessaire, examiné le bloc de serveur Ubuntu par défaut et créer une configuration personnalisée. Enfin, nous avons généré un certificat auto-signé et implémenté les modifications nécessaires au bloc serveur pour utiliser le protocole HTTPS.

En tant qu'alternative, nous avons envisagé de mettre en œuvre «Saisons crypter!», Qui peut nous fournir un certificat reconnu sans frais. N'hésitez pas à poser des questions et visitez la documentation officielle de Nginx pour des informations plus détaillées.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
  • Ubuntu 20.04 Guide
  • Ubuntu 20.04 Hadoop
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Les 8 meilleurs environnements de bureau Ubuntu (20.04 FOCAL FOSSA…
  • Liste des clients FTP et installation sur Ubuntu 20.04 Linux…
  • Ubuntu 20.04: WordPress avec l'installation de Nginx
  • Comment migrer Apache vers Nginx en convertissant les objets VirtualHosts en…