NGINX
Guide étape par étape pour sécuriser votre déploiement LibreChat avec Nginx comme proxy inverse et HTTPS
Ce guide couvre les étapes essentielles pour sécuriser votre déploiement LibreChat avec un certificat SSL/TLS pour HTTPS, configurer Nginx en tant que reverse proxy et paramétrer votre domaine.
Prérequis
- Un serveur cloud (par ex. AWS, Google Cloud, Azure, Digital Ocean).
- Un nom de domaine enregistré.
- Accès au terminal de votre serveur cloud.
- Node.js
v24.16.0et npmv11.16.0si vous exécutez LibreChat directement sur l'hôte.
Configuration initiale
Pointer votre domaine vers votre serveur
Avant de procéder à l'acquisition du certificat, faites pointer votre domaine vers l'adresse IP de votre serveur cloud. Cette étape est fondamentale et doit précéder la configuration du certificat SSL en raison du temps que les enregistrements DNS peuvent mettre à se propager à l'échelle mondiale.
- Connectez-vous au panneau de contrôle de votre registraire de domaine.
- Accédez aux paramètres DNS.
- Créez un
A recordpointant votre domaine vers l'adresse IP de votre serveur cloud. - Attendez que les changements DNS se propagent mondialement (vous pouvez vérifier en effectuant un ping sur votre domaine :
ping your_domain.com).
Obtenir un certificat SSL/TLS
Pour sécuriser votre application LibreChat avec HTTPS, vous aurez besoin d'un certificat SSL/TLS. Let's Encrypt propose des certificats gratuits :
-
Installer Certbot :
- Pour Ubuntu :
sudo apt-get install certbot python3-certbot-nginx - Pour CentOS :
sudo yum install certbot python2-certbot-nginx
- Pour Ubuntu :
-
Obtenir le certificat :
- Exécutez
sudo certbot --nginxpour obtenir et installer automatiquement le certificat pour Nginx. - Suivez les instructions à l'écran. Certbot vous demandera des informations et terminera le processus de validation.
- Une fois l'opération réussie, Certbot stockera vos fichiers de certificat.
- Exécutez
Configurer Nginx comme proxy inverse
Nginx agit comme un reverse proxy, transférant les requêtes des clients vers votre application LibreChat. Il existe deux options de déploiement :
Option A : Utilisation du deploy-compose.yml Docker Compose (Recommandé)
Le fichier deploy-compose.yml inclut un conteneur Nginx et utilise le fichier client/nginx.conf pour la configuration de Nginx. Cependant, comme sudo certbot --nginx extrait le certificat vers la configuration de l'hôte, vous devez dupliquer le certificat vers les conteneurs Docker.
- Mettez à jour
client/nginx.confavec votre domaine et les chemins de vos certificats. - Mettez à jour
deploy-compose.ymldans la sectionclientpour monter les fichiers de certificat depuis l'hôte :
- Arrêtez toute instance en cours d'exécution :
npm run stop:deployed - Validez les modifications dans une nouvelle branche Git.
- Rebasez l'instance déployée :
npm run rebase:deployed
Option B : Déploiement basé sur l'hôte sans Docker
Si vous n'utilisez pas Docker, vous pouvez installer et configurer Nginx directement sur l'hôte :
-
Installer Nginx :
- Ubuntu :
sudo apt-get install nginx - CentOS :
sudo yum install nginx
- Ubuntu :
-
Démarrer Nginx :
sudo systemctl start nginx -
Ouvrez le fichier de configuration Nginx :
sudo nano /etc/nginx/sites-available/default -
Remplacez le contenu du fichier par ce qui suit, en veillant à remplacer
your_domain.compar votre domaine etapp_portpar le port de votre application :
- Vérifiez la configuration de Nginx :
sudo nginx -t - Recharger Nginx :
sudo systemctl reload nginx
Exécuter l'application
- Accédez au répertoire de votre application :
- Démarrez votre application en utilisant Docker Compose :
Renouvellement des certificats lors de l'utilisation de nginx
Si vous avez configuré nginx en utilisant l'Option A recommandée ci-dessus, suivez ces étapes pour renouveler les certificats :
- Accédez au répertoire de votre application
- Arrêtez vos conteneurs Docker en cours d'exécution
- renouveler les certificats
- Redémarrez votre application
Remarque : certbot pourrait redémarrer le nginx de l'hôte. Vous pouvez le tuer avec sudo pkill nginx
Pare-feu d'application Web (WAF)
Nginx peut être configuré pour agir en tant que pare-feu d'application web (WAF) en tirant parti de l'OWASP Core Rule Set (CRS), qui fournit un ensemble robuste de règles pour se protéger contre les vulnérabilités et les attaques courantes des applications web. L'utilisation de l'OWASP CRS avec Nginx peut renforcer la sécurité de votre déploiement LibreChat en ajoutant une couche de protection supplémentaire.
-
Installer OWASP CRS :
- Ubuntu :
sudo apt-get install nginx-modsecurity-crs
- Ubuntu :
-
Activer ModSecurity dans Nginx :
-
Ouvrez votre fichier de configuration Nginx (par ex.
/etc/nginx/nginx.conf). -
Ajoutez les lignes suivantes à l'intérieur du bloc
http:
-
-
Configurer OWASP CRS :
- Le package OWASP CRS inclut généralement un fichier de configuration (par exemple,
/etc/nginx/modsecurity.d/nginx-modsecurity.conf) où vous pouvez ajuster divers paramètres et ensembles de règles en fonction de vos besoins.
- Le package OWASP CRS inclut généralement un fichier de configuration (par exemple,
-
Recharger Nginx :
sudo systemctl reload nginx
En activant OWASP CRS dans votre configuration Nginx, vous pouvez tirer parti de l'ensemble complet de règles fournies par le projet pour détecter et atténuer diverses vulnérabilités et attaques d'applications web, telles que l'injection SQL, le cross-site scripting (XSS), l'inclusion de fichiers distants, et plus encore.
Mise en cache et compression de fichiers statiques
LibreChat prend désormais en charge nativement la mise en cache et la compression des fichiers statiques. Si vous utilisez NGINX pour gérer la compression, vous devriez désactiver la compression dans LibreChat pour éviter tout traitement redondant. Vous pouvez le faire en définissant la variable d'environnement DISABLE_COMPRESSION sur true dans votre configuration LibreChat.
Cela empêchera LibreChat de compresser les fichiers statiques, permettant ainsi à NGINX de gérer la compression plus efficacement.
Pour plus d'informations sur la gestion des fichiers statiques dans LibreChat, y compris les options de mise en cache, consultez la documentation Static File Handling.
Que pensez-vous de ce guide ?