Déploiement et configuration d'un serveur mandataire (Reverse Proxy) avec Nginx
Sommaire
1. Installation de Nginx
Après avoir configuré votre serveur Debian, installez Nginx :
sudo apt install nginx
2. Création du fichier de configuration pour le Reverse Proxy
Ensuite, créez un fichier de configuration pour votre site dans le répertoire sites-available de Nginx :
nano /etc/nginx/sites-available/01-www.domain.ltd.conf
Ajoutez la configuration suivante pour définir un serveur par défaut qui renverra une erreur 404 pour toutes les requêtes entrantes :
# ------------------------------------------
# PROXY
# ------------------------------------------
server {
listen 80 default;
listen [::]:80 default;
server_name default-host.localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
return 404;
}
}
3. Activation de la configuration
Créez un lien symbolique vers le répertoire sites-enabled pour activer cette configuration :
sudo ln -s /etc/nginx/sites-available/01-www.domain.tld.conf /etc/nginx/sites-enabled/
Rechargez la configuration de Nginx pour prendre en compte les modifications :
sudo systemctl reload nginx
Vérifiez que Nginx fonctionne correctement :
systemctl status nginx.service
4. Création d'un certificat auto-signé pour SSL
Avant de configurer SSL, vous devez créer un certificat auto-signé pour sécuriser vos connexions HTTPS. Exécutez les commandes suivantes pour créer le certificat :
sudo mkdir -p /etc/ssl/private /etc/ssl/certs
sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -days 365
Suivez les instructions pour remplir les informations nécessaires (nom de l'organisation, pays, etc.).
5. Configuration SSL pour Nginx
Modifiez votre fichier de configuration pour ajouter la section SSL et activer le chiffrement HTTPS :
# ------------------------------------------
# PROXY
# ------------------------------------------
server {
listen 80 default;
listen [::]:80 default;
listen 443 ssl;
listen [::]:443 ssl;
server_name default-host.localhost;
# Configuration SSL
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
# Block Exploits
include conf.d/include/block-exploits.conf;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
return 404;
}
}
6. Configuration des sites en back-end
6.1. Configuration pour Nextcloud
Ajoutez la configuration suivante pour proxyfier les requêtes vers votre instance Nextcloud. Modifiez le fichier de configuration :
nano /etc/nginx/sites-available/01-www.domain.ltd.conf
Ajoutez cette section :
# ------------------------------------------
# NEXTCLOUD
# ------------------------------------------
server {
listen 443 ssl;
server_name nextcloud.domain.tld;
# Block Exploits
include conf.d/include/block-exploits.conf;
ssl_certificate /etc/nginx/ssl/NEXTCLOUD/nextcloud.crt;
ssl_certificate_key /etc/nginx/ssl/NEXTCLOUD/nextcloud.key;
ssl_verify_client off;
location / {
proxy_set_header Host nextcloud.domain.tld;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Accept-Encoding "";
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_pass https://IP_NEXTCLOUD:443;
}
}
6.2. Configuration pour OWA (Exchange)
Ajoutez cette section pour proxyfier le serveur de messagerie OWA (Outlook Web App) :
# ------------------------------------------
# OWA EXCHANGE
# ------------------------------------------
server {
listen 443 ssl;
server_name mail.domain.tld;
ssl_certificate /etc/nginx/ssl/MAIL/exchange.crt;
ssl_certificate_key /etc/nginx/ssl/MAIL/exchange.key;
ssl_verify_client off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_http_version 1.1;
proxy_pass_header Date;
proxy_pass_header Server;
proxy_pass_header Authorization;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Accept-Encoding "";
proxy_set_header Connection "";
proxy_set_header Authorization $http_authorization;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 36000s;
proxy_redirect off;
proxy_pass https://IP_EXCHANGE;
}
}
7. Vérification et redémarrage de Nginx
Une fois les modifications apportées, vérifiez la syntaxe de votre fichier de configuration Nginx :
sudo nginx -t
Si tout est correct, rechargez Nginx pour appliquer les modifications :
sudo systemctl reload nginx
8. Conclusion
Votre serveur Nginx est maintenant configuré comme un reverse proxy pour vos applications Nextcloud et Exchange, avec une configuration SSL de base.
Vous pouvez tester la configuration en accédant à https://nextcloud.domain.tld et https://mail.domain.tld dans votre navigateur. Si vous avez utilisé un certificat auto-signé, votre navigateur pourrait vous avertir de la non-validité du certificat, mais cela ne pose pas de problème pour un environnement de test ou interne.