Recherche de site Web

Comment installer Nginx avec des hôtes virtuels et un certificat SSL


Nginx (abréviation de Engine-x) est un serveur HTTP et proxy inverse gratuit, open source, puissant, performant et évolutif, un proxy de messagerie et TCP/UDP standard. serveur. Il est facile à utiliser et à configurer, avec un langage de configuration simple. Nginx est désormais le logiciel de serveur Web préféré pour alimenter les sites très chargés, en raison de son évolutivité et de ses performances.

Dans cet article, nous expliquerons comment utiliser Nginx comme serveur HTTP, le configurer pour servir du contenu Web, configurer des hôtes virtuels basés sur le nom, et créer et installer SSL pour des transmissions de données sécurisées, y compris un certificat auto-signé sur Ubuntu et CentOS. .

Comment installer le serveur Web Nginx

Commencez par installer le package Nginx à partir des référentiels officiels à l'aide de votre gestionnaire de packages, comme indiqué.

------------ On Ubuntu ------------ 
sudo apt update 
sudo apt install nginx 

------------ On CentOS ------------
sudo yum update 
sudo yum install epel-release 
sudo yum install nginx 

Une fois le package Nginx installé, vous devez démarrer le service pour le moment, lui permettre de démarrer automatiquement au démarrage et afficher son état à l'aide des commandes suivantes. Notez que sur Ubuntu, il doit être démarré et activé automatiquement pendant que le package est préconfiguré.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

À ce stade, le serveur Web Nginx devrait être opérationnel, vous pouvez vérifier l'état avec la commande netstat.

sudo netstat -tlpn | grep nginx

Si votre système dispose d'un pare-feu activé, vous devez ouvrir les ports 80 et 443 pour autoriser le trafic HTTP et HTTPS. respectivement, à travers lui, en courant.

------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload 

La méthode idéale pour tester l’installation de Nginx et vérifier si elle fonctionne et est capable de servir des pages Web consiste à ouvrir un navigateur Web et à pointer vers l’adresse IP du serveur.

http://Your-IP-Address
OR
http://Your-Domain.com

Une installation fonctionnelle doit être indiquée par l’écran suivant.

Comment configurer le serveur Web Nginx

Les fichiers de configuration de Nginx se trouvent dans le répertoire /etc/nginx et le fichier de configuration global se trouve dans /etc/nginx/nginx.conf sur CentOS et Ubuntu.

Nginx est composé de modules contrôlés par diverses options de configuration, appelées directives. Une directive peut être soit simple (sous la forme, le nom et les valeurs se terminent par un ;) ou bloc (contient des instructions supplémentaires en utilisant {}). Et une directive de bloc qui contient d'autres directives est appelée un contexte.

Toutes les directives sont expliquées en détail dans la documentation Nginx sur le site Web du projet. Vous pouvez vous y référer pour plus d'informations.

Comment diffuser du contenu statique à l'aide de Nginx en mode autonome

À un niveau fondamental, Nginx peut être utilisé pour servir du contenu statique tel que des fichiers HTML et multimédias, en mode autonome, où seul le bloc serveur par défaut est utilisé (analogue à Apache où aucun hôte virtuel n'a été configuré).

Nous commencerons par expliquer brièvement la structure de configuration dans le fichier de configuration principal.

 
sudo vim /etc/nginx/nginx.conf

Si vous examinez ce fichier de configuration Nginx, la structure de configuration devrait apparaître comme suit et est appelée le contexte principal, qui contient de nombreuses autres directives simples et de bloc. Tout le trafic Web est géré dans le contexte http.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Ce qui suit est un exemple de fichier de configuration principale de Nginx (/etc/nginx/nginx.conf), où le bloc http ci-dessus contient une directive d'inclusion qui indique à Nginx où trouver les fichiers de configuration de site Web (configurations d'hôte virtuel) .

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Notez que sur Ubuntu, vous trouverez également une directive include supplémentaire (include /etc/nginx/sites-enabled/*;), où le répertoire /etc /nginx/sites-enabled/ stocke les liens symboliques vers les fichiers de configuration des sites Web créés dans /etc/nginx/sites-available/, pour activer les sites. Et la suppression d'un lien symbolique désactive ce site particulier.

En fonction de votre source d'installation, vous trouverez le fichier de configuration du site Web par défaut dans /etc/nginx/conf.d/default.conf (si vous avez installé à partir du référentiel officiel NGINX et EPEL) ou /etc/nginx/sites-enabled/default (si vous avez installé à partir des référentiels Ubuntu).

Il s'agit de notre exemple de bloc de serveur nginx par défaut situé dans /etc/nginx/conf.d/default.conf sur le système de test.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Une brève explication des directives dans la configuration ci-dessus :

  • écouter : spécifie le port sur lequel le serveur écoute.
  • server_name : définit le nom du serveur qui peut être des noms exacts, des noms génériques ou des expressions régulières.
  • root : spécifie le répertoire à partir duquel Nginx servira les pages Web et autres documents.
  • index : spécifie le(s) type(s) de fichier(s) d'index à servir.
  • emplacement : utilisé pour traiter les demandes de fichiers et de dossiers spécifiques.

Depuis un navigateur Web, lorsque vous pointez vers le serveur à l'aide du nom d'hôte localhost ou de son adresse IP, il traite la requête et sert le fichier /var/www/html/index.html et enregistre immédiatement l'événement dans son journal d'accès (/var/log/nginx/access.log) avec une réponse 200 (OK). En cas d'erreur (événement d'échec), il enregistre le message dans le journal des erreurs (/var/log/nginx/error.log).

Pour en savoir plus sur la connexion à Nginx, vous pouvez vous référer à Comment configurer l'accès personnalisé ou les formats de journal d'erreurs dans Nginx.

Au lieu d'utiliser les fichiers journaux par défaut, vous pouvez définir des fichiers journaux personnalisés pour différents sites Web, comme nous le verrons plus tard, dans la section « configuration d'hôtes virtuels basés sur le nom (blocs de serveur) ».

Comment restreindre l'accès à une page Web avec Nginx

Afin de restreindre l'accès à votre site Web/application ou à certaines parties de celui-ci, vous pouvez configurer une authentification HTTP de base. Cela peut être utilisé essentiellement pour restreindre l'accès à l'ensemble du serveur HTTP, à des blocs de serveur individuels ou à des blocs d'emplacement.

Commencez par créer un fichier qui stockera vos informations d'identification d'accès (nom d'utilisateur/mot de passe) à l'aide de l'utilitaire htpasswd.

 
yum install httpd-tools		#RHEL/CentOS
sudo apt install apache2-utils	#Debian/Ubuntu

À titre d'exemple, ajoutons l'utilisateur admin à cette liste (vous pouvez ajouter autant d'utilisateurs que possible), où l'option -c est utilisée pour spécifier le fichier de mot de passe, et l'option -B pour chiffrer le mot de passe. Une fois que vous aurez appuyé sur [Entrée], il vous sera demandé de saisir le mot de passe de l'utilisateur :

sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

Ensuite, attribuons les autorisations et la propriété appropriées au fichier de mots de passe (remplacez l'utilisateur et le groupe nginx par www-data sur Ubuntu).

sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Comme nous l'avons mentionné précédemment, vous pouvez restreindre l'accès à votre serveur Web, à un seul site Web (en utilisant son bloc serveur) ou à un répertoire ou fichier spécifique. Deux directives utiles peuvent être utilisées pour y parvenir :

  • auth_basic – active la validation du nom d'utilisateur et du mot de passe à l'aide du protocole « Authentification de base HTTP ».
  • auth_basic_user_file – spécifie le fichier des informations d'identification.

À titre d'exemple, nous montrerons comment protéger par mot de passe le répertoire /var/www/html/protected.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Maintenant, enregistrez les modifications et redémarrez le service Nginx.

sudo systemctl restart nginx 

La prochaine fois que vous pointerez votre navigateur vers le répertoire ci-dessus (http://localhost/protected), il vous sera demandé de saisir vos identifiants de connexion (nom d'utilisateur admin et le mot de passe choisi ).

Une connexion réussie vous permet d'accéder au contenu du répertoire, sinon vous obtiendrez une erreur « Autorisation 401 requise ».

Comment configurer des hôtes virtuels basés sur le nom (blocs de serveur) dans Nginx

Le contexte du serveur permet à plusieurs domaines/sites d'être stockés et servis à partir de la même machine physique ou du même serveur privé virtuel (VPS). Plusieurs blocs de serveur (représentant des hôtes virtuels) peuvent être déclarés dans le contexte http pour chaque site/domaine. Nginx décide quel serveur traite une requête en fonction de l'en-tête de requête qu'il reçoit.

Nous allons démontrer ce concept en utilisant les domaines factices suivants, chacun situé dans le répertoire spécifié :

  • wearelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

Ensuite, attribuez les autorisations appropriées sur le répertoire pour chaque site.

sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Maintenant, créez un exemple de fichier index.html dans chaque répertoire public_html.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

Ensuite, créez les fichiers de configuration du bloc serveur pour chaque site dans le répertoire /etc/httpd/conf.d.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf

Ajoutez la déclaration de blocage du serveur suivante dans le fichier wearelinux-console.net.conf.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Ensuite, ajoutez la déclaration de bloc de serveur suivante dans le fichier welovelinux.com.conf.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Pour appliquer les modifications récentes, redémarrez le serveur Web Nginx.

sudo systemctl restart nginx

et pointer votre serveur Web vers les adresses ci-dessus devrait vous faire voir les pages principales des domaines factices.

http://wearelinux-console.net
http://welovelinux.com

Important : Si SELinux est activé, sa configuration par défaut ne permet pas à Nginx d'accéder aux fichiers en dehors des emplacements autorisés bien connus (tels que /etc/nginx pour les configurations, /var/log/nginx pour les logs, /var/www/html pour les fichiers Web, etc.) .

Vous pouvez gérer cela en désactivant SELinux ou en définissant le contexte de sécurité correct. Pour plus d'informations, reportez-vous à ce guide : utiliser Nginx et Nginx Plus avec SELinux sur le site Web de Nginx Plus.

Comment installer et configurer SSL avec Nginx

Les certificats SSL permettent d'activer un HTTP sécurisé (HTTPS) sur votre site, ce qui est essentiel pour établir une connexion fiable/sécurisée entre les utilisateurs finaux et votre serveur en chiffrant les informations qui est transmis vers, depuis ou au sein de votre site.

Nous expliquerons comment créer et installer un certificat auto-signé et générer une demande de signature de certificat (CSR) pour acquérir un certificat SSL auprès d'une autorité de certification (CA), à utiliser avec Nginx.

Les certificats auto-signés sont libres de création et conviennent pratiquement à des fins de test et pour les services internes uniquement du réseau local. Pour les serveurs publics, il est fortement recommandé d'utiliser un certificat émis par une autorité de certification (par exemple Let's Encrypt) pour garantir son authenticité.

Pour créer un certificat auto-signé, créez d'abord un répertoire dans lequel vos certificats seront stockés.

sudo mkdir /etc/nginx/ssl-certs/

Générez ensuite votre certificat auto-signé et la clé à l'aide de l'outil de ligne de commande openssl.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

Décrivons brièvement les options utilisées dans la commande ci-dessus :

  • req -X509 – indique que nous créons un certificat x509.
  • -nodes (NO DES) – signifie « ne pas chiffrer la clé ».
  • -days 365 – spécifie le nombre de jours pendant lesquels le certificat sera valide.
  • -newkey rsa:2048 – spécifie que la clé générée à l'aide de l'algorithme RSA doit être de 2 048 bits.
  • -keyout /etc/nginx/ssl-certs/nginx.key – spécifie le chemin complet de la clé RSA.
  • -out /etc/nginx/ssl-certs/nginx.crt – spécifie le chemin complet du certificat.

Ensuite, ouvrez le fichier de configuration de votre hôte virtuel et ajoutez les lignes suivantes à une déclaration de blocage du serveur en écoute sur le port 443. Nous allons tester avec le fichier hôte virtuel /etc/nginx/conf.d/wearelinux-console.net.conf.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

Ajoutez ensuite la directive SSL au fichier de configuration nginx, elle devrait ressembler à ci-dessous.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Redémarrez maintenant Nginx et pointez votre navigateur vers l'adresse suivante.

https://www.wearelinux-console.net

Si vous souhaitez acheter un certificat SSL auprès d'une autorité de certification, vous devez générer une demande de signature de certificat (CSR), comme indiqué.

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

Vous pouvez également créer un CSR à partir d'une clé privée existante.

sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Ensuite, vous devez envoyer le CSR généré à une AC pour demander l'émission d'un certificat SSL signé par une autorité de certification. Une fois que vous recevez votre certificat de l'autorité de certification, vous pouvez le configurer comme indiqué ci-dessus.

Lire aussi : Le guide ultime pour sécuriser, renforcer et améliorer les performances du serveur Web Nginx

Résumé

Dans cet article, nous avons expliqué comment installer et configurer Nginx ; a expliqué comment configurer un hébergement virtuel basé sur le nom avec SSL pour sécuriser les transmissions de données entre le serveur Web et un client.

Si vous avez rencontré des revers lors de votre processus d'installation/configuration de nginx ou si vous avez des questions ou des commentaires, utilisez le formulaire de commentaires ci-dessous pour nous contacter.