Installation de Nginx#
Pour installer Nginx, il suffit d’exécuter les commandes suivantes :
sudo apt update # Met à jour le gestionnaire apt
sudo apt install nginx curl -y # Installe nginx
sudo systemctl enable nginx # Ajoute nginx au démarrage automatique
sudo systemctl start nginx # Lance nginx
Mise en place d’un site#
Configuration Nginx#
Une fois que Nginx est installé, nous pouvons commencer la configuration du site.
Tout d’abord, nous devons créer le dossier où seront stockés les fichiers du site puis attribuer les bonnes permissions.
Vous pouvez mettre une page temporaire dans ce dossier ou votre site s’il existe déjà.
# Crée le répertoire racine du site
sudo mkdir -p /var/www/mon_site_web
# Définit les permissions
sudo chown -R www-data:www-data /var/www/mon_site_web
sudo chmod -R 755 /var/www/mon_site_web
L’utilisateur www-data est celui utilisé par Nginx. C’est la raison pour laquelle il est mis comme propriétaire du dossier.
Nginx gère la disponibilité des sites via deux dossiers :
sites-available: Contient les fichiers de configuration des sites sur le serveursites-enabled: Contient des liens symboliques vers les fichiers de configurations. Seuls les sites ayant un lien symboliques sont accessible via le serveur.
Nous devons donc commencer par créer le fichier de configuration du site.
sudo nano /etc/nginx/sites-available/mon_site_web
Ce fichier suit le format suivant :
server {
# Port d'écoute
listen 80; # IPv4
listen [::]:80; # IPv6
# Nom du site
server_name mon_site_web;
# Chemin racine du site
root /var/www/mon_site_web;
# Ficher à chercher à la racine
index index.html;
# Comportement lors de la réception d'une requête
location / {
try_files $uri $uri/ =404;
}
}
Une fois que le site est mit comme étant disponible, nous devons l’activer en créant un lien symbolique vers le fichier de configuration dans le dossier des sites activés.
# Créer un lien symbolique pour activer la configuration
sudo ln -s /etc/nginx/sites-available/mon_site_web /etc/nginx/sites-enabled/
Nginx propose une commande pour vérifier qu’il n’y a pas d’erreurs de syntaxe dans les fichiers de configuration.
Si le test réussit, vous pouvez redémarrer Nginx pour appliquer les changements.
# Tester la configuration
sudo nginx -t
# Redémarrer Nginx
sudo systemctl restart nginx
Configuration du Routeur#
La dernière étape pour rendre accessible votre site est le transfert de trafic, c’est-à-dire faire en sort que les requêtes arrivant au routeur soient transférées vers votre serveur.
Pour ce faire, vous devez vous connecter à l’interface d’administration de votre routeur internet (souvent 192.168.0.1 ou 192.168.1.1) puis chercher la partie Redirection de port ou Port forwarding.
Vous devez alors créer une règle pour rediriger le trafic arrivant sur le port 80. La règle doit être la suivante :
- Port Externe (Public) : 80
- Port Interne (Local) : 80
- Adresse de redirection : L’adresse IP locale de votre machine
Votre site est maintenant accessible en HTTP via l’adresse IP de votre routeur ou via une URL si vous avez paramétré un DNS.
Activation de la connexion HTTPS#
Votre site est accessible mais uniquement en HTTP. Il est recommandé de sécuriser votre serveur en autorisant uniquement les connexions via HTTPS.
Pour ce faire, nous allons utiliser certbot qui permet la génération et le renouvellement de certificats.
Mode SSL/TLS#
Avant de commencer avec certbot, il est vivement recommandé de passer le chiffrement SSL/TLS en mode Full (Strict) sur Cloudflare.
Pour cela, allez dans votre compte Cloudflare, partie SSL/TLS, onglet *Overview, puis cliquez sur Configure pour changer de mode. Ensuite, choisissez Custom SSL/TLS puis sélectionnez Full (Strict). Vous pouvez maintenant cliquez sur Save et retourner sur votre terminal.
Installation de certbot#
Pour installer certbot, utilisez la commande suivante :
# Installer Certbot et le plugin Nginx
sudo apt install certbot python3-certbot-nginx -y
Génération du certificat#
Maintenant que certbot est installé, nous pouvons lancer la génération du certificat avec la commande suivante :
sudo certbot --nginx -d mon_site_web
Une fois la commande lancée, suivez les instructions à l’écran. Une des question vous demandera de choisir entre retirer la connexion HTTP ou la rediriger vers la connexion HTTPS. Il est recommandé de rediriger les connexions HTTP vers celles HTTPS.
Une fois le certificat généré, certbot fait des changements dans le fichier de configuration de votre site. Après modification, il doit avoir le format suivant :
server {
# Nom du site
server_name mon_site_web;
# Chemin racine du site
root /var/www/mon_site_web;
# Ficher à rechercher à la racine
index index.html;
# Comportement lors de la réception d'une requête
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mon_site_web/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mon_site_web/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = mon_site_web) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name mon_site_web;
return 404; # managed by Certbot
}
Renouvellement de certificat#
Les certificats sont valables 90 jours. Cependant, certbot a automatiquement configuré une tâche cron ou un timer systemd pour le renouvellement.
Vous pouvez tester le processus avec la commande suivante. Si elle réussit, le renouvellement automatique fonctionnera correctement.
sudo certbot renew --dry-run
Ajouter d’autres sites#
Pour ajouter de nouveaux sites sur le même serveur, il suffit de répéter la démarche de l’étape Configuration Nginx avec le nom du site que vous voulez ajouter.
Vous aurez alors l’architecture suivante :
root
├── /etc/nginx # Dossier de configuration de Nginx
│ ├── sites-available # Fichiers de configuration
| | ├── mon_site_web
| │ └── deuxieme_site
│ └── sistes-enabled # Liens symboliques pour activer les sites
| ├── mon_site_web
| └── deuxieme_site
|
└── /var/www # Dossier contenant les fichiers des sites
├── mon_site_web # Code du premier site
│ ├── index.html
│ └── styles.css
└── deuxieme_site # Code du deuxième site
├── index.html
└── styles.css
Le fichier de configuratuion du deuxième site sera alors :
server {
# Port d'écoute
listen 80; # IPv4
listen [::]:80; # IPv6
# Nom du site
server_name deuxieme_site;
# Chemin racine du site
root /var/www/deuxieme_site;
# Ficher à chercher à la racine
index index.html;
# Comportement lors de la réception d'une requête
location / {
try_files $uri $uri/ =404;
}
}
Une fois la configuration nginx terminée, vous pouvez créer l’enregistremen DNS pour rediriger la requête HTTP vers l’adresse IP de votre routeur internet.
Il est aussi possible et recommandé de sécuriser la connexion en réalisant les même commandes que dans la partie Génération du certificat.