Recherche de site Web

Configuration du serveur proxy inverse nginx sur Ubuntu/Debian


Un serveur proxy inverse est un type de serveur qui se trouve devant les serveurs Web et transmet les demandes des clients (par exemple, un navigateur Web) à ces serveurs Web. Les proxys inverses sont généralement installés pour augmenter la sécurité, les performances et la fiabilité. Ce tutoriel vous guidera tout au long du processus de configuration de Nginx, un serveur web performant et hautement évolutif, en tant que proxy inverse sur un système fonctionnant sous Ubuntu ou Debian.

Dans ce tutoriel, vous allez apprendre :

  • Comment installer Nginx et les packages nécessaires
  • Comment configurer Nginx en tant que proxy inverse avec SSL
  • Comment générer des certificats SSL et sécuriser Nginx
  • Comment tester et vérifier votre configuration Nginx

Installation et configuration initiale

Avant de configurer Nginx en tant que proxy inverse, il doit être installé avec les autres packages nécessaires. Cette section couvrira le processus d’installation.

  1. Mettez à jour votre système : commencez par mettre à jour vos listes de paquets et votre système.

    sudo apt update && sudo apt upgrade
  2. La mise à jour de votre système vous permet de vous assurer que vous disposez des derniers correctifs de sécurité et dépendances requis pour Nginx.

  3. Installer Nginx : Installez Nginx à l’aide du gestionnaire de paquets.

    sudo apt install nginx
  4. Une fois installé, le service Nginx devrait démarrer automatiquement. Vous pouvez vérifier son état avec sudo systemctl status nginx.

Configuration de Nginx en tant que proxy inverse

Une fois Nginx installé, l’étape suivante consiste à le configurer en tant que proxy inverse pour transmettre les requêtes à un ou plusieurs serveurs Web backend.

  1. Configurer les paramètres du proxy : Commencez par modifier le fichier de configuration Nginx pour établir les paramètres du proxy inverse.

    sudo nano /etc/nginx/sites-available/default

    Insérez l’extrait de configuration suivant à l’intérieur du bloc serveur. Cette configuration transmet les requêtes entrantes à un serveur backend fonctionnant sur le port 3000 :

    location / {
        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;
    }
    

    Cette configuration définit un bloc d’emplacement qui correspond à toutes les requêtes (indiqué par « / »). La directive proxy_pass envoie ces requêtes au serveur backend spécifié. La directive proxy_http_version 1.1 spécifie HTTP/1.1 pour la connexion au serveur proxy. Les lignes proxy_set_header modifient les en-têtes de requête transmis au serveur proxy : les en-têtes Upgrade et Connection prennent en charge les connexions mises à niveau telles que les websockets, tandis que l’en-tête Host conserve l’hôte d’origine demandé par le client. La directive proxy_cache_bypass garantit que le cache est contourné si la valeur de la variable $http_upgrade n’est pas vide, ce qui permet de maintenir l’intégrité des mises à niveau et d’assurer une communication directe avec le serveur.

    Vous trouverez ci-dessous un exemple complet de l’apparence de votre fichier /etc/nginx/sites-available/default, qui inclut cette configuration dans une configuration HTTPS sécurisée :

    server {
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name yourdomain.com www.yourdomain.com;
    
        ssl_certificate /etc/ssl/certs/your_ssl_certificate.crt;
        ssl_certificate_key /etc/ssl/private/your_private_key.key;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
    
        location / {
            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;
        }
    
        access_log /var/log/nginx/yourdomain_access.log;
        error_log /var/log/nginx/yourdomain_error.log;
    }
    

    Pour générer un certificat SSL pour cette configuration à l’aide de Let’s Encrypt, vous pouvez utiliser l’outil Certbot. Exécutez les commandes suivantes pour installer Certbot et générer des certificats :

    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

    L’exécution de ces commandes demandera à Certbot de modifier automatiquement votre configuration Nginx, en remplaçant les chemins d’accès au certificat et à la clé SSL par les chemins d’accès aux nouveaux certificats qu’il génère. Il s’agit d’un processus automatisé qui ajuste votre configuration Nginx pour utiliser les certificats Let’s Encrypt, en veillant à ce qu’ils soient renouvelés automatiquement avant d’expirer. Si vous avez déjà spécifié des chemins d’accès pour les certificats auto-signés ou d’autres certificats SSL dans votre configuration, Certbot les remplacera par les nouveaux chemins de certificat approuvés.

    Si vous préférez utiliser un certificat SSL auto-signé au lieu d’en obtenir un auprès de Let’s Encrypt, vous pouvez en générer un avec OpenSSL. Cette approche est particulièrement utile pour les tests ou l’utilisation interne. Exécutez la commande suivante pour générer un certificat et une clé auto-signés :

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/your_private_key.key -out /etc/ssl/certs/your_ssl_certificate.crt -subj "/CN=*.yourdomain.com"
  2. Cette commande crée une clé RSA et un certificat valable 365 jours, avec le nom commun « *.yourdomain.com » pour couvrir tous les sous-domaines de votre domaine. Le certificat et la clé sont stockés aux emplacements désignés. Gardez à l’esprit que, puisque ce certificat est auto-signé, les navigateurs peuvent présenter un avertissement sur la fiabilité du certificat lorsque les utilisateurs accèdent à votre site.

  3. Validez votre configuration Nginx :

    sudo nginx -t

    Cette commande vérifie la présence d’erreurs de syntaxe et confirme si le fichier de configuration est correct et prêt pour le rechargement du service.

  4. Recharger Nginx : Si le test de configuration est réussi, rechargez Nginx pour appliquer les modifications.

    sudo systemctl reload nginx
  5. Le rechargement applique toutes les modifications de configuration sans interrompre les connexions en cours.

  6. Testez votre configuration : vérifiez que le proxy inverse fonctionne correctement en accédant à votre domaine dans un navigateur Web ou à l’aide d’un outil tel que curl.

    curl -I http://yourdomain.com
  7. Cette commande doit renvoyer des en-têtes HTTP à partir du serveur principal, confirmant que le proxy inverse est actif et opérationnel.

Conclusion

La configuration de Nginx en tant que proxy inverse sur Ubuntu ou Debian améliore la sécurité et l’efficacité de votre serveur. En suivant ces étapes, vous avez appris à installer Nginx, à le configurer en tant que proxy inverse et à gérer son service. Vous pouvez désormais étendre votre configuration en ajoutant le cryptage SSL/TLS ou en optimisant les paramètres de cache pour améliorer les performances.

Articles connexes: