Skip to main content

Serveur web auto-hébergé


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.

Dans les commandes suivantes, le site est nommé mon_site_web. Toutes les commandes sont donc à adapter selon le nom de votre 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 serveur
  • sites-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
Si vous prévoyez de mettre en place la connexion HTTPS, vous pouvez alors faire de même avec le port 443.

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.