Un proxy inversé (reverse proxy) est un serveur placé en amont d’un ou plusieurs serveurs web. Son rôle est de fournir une passerelle entre Internet et le réseau local. L’utilisateur du Web passe par son intermédiaire pour accéder aux applications de serveurs internes.
Dans cet article nous allons mettre en place un reverse proxy en utilisant le projet docker Nginx Proxy Manager qui contient un serveur Nginx couplé à une web interface développée par Jamie Curnow.
Quel est l’intérêt?
Il peut y avoir pas mal de raison qui peuvent conduire à utiliser un reverse proxy et plus particulièrement le projet Nginx Proxy Manager, voici une liste de ses avantages:
- Rendre accessible depuis le Web des serveurs et services (Web, jeu, mail …) présent sur votre réseau local sans les exposés directement à internet.
- La prise en charge intégrée de Let’s Encrypt qui vous permet de sécuriser avec HTTPS vos services Web sans frais. Les certificats se renouvellent même automatiquement.
- Une image Docker déployable rapidement avec une interface graphique facile d’utilisation.
- Possibilité d’exposer des services à des personnes spécifiques avec possibilité de gérer des utilisateurs et des droits d’accès à tel ou tel service.
Prérequis
- Une machine tournant sous Debian 10
- Avoir un nom de domaine (OVH, Gandi, etc) ou un DynDNS (No-IP, DuckDNS, etc)
- Avoir installé Docker sur Debian 10
- Avoir installé Docker Compose sur Debian 10
- Avoir fait l’ouverture des ports 80 (HTTP) et 443 (HTTPS) vers votre serveur Debian.
Installation de Nginx Proxy Manager
Pour commencer, nous allons créer le dossier dans lequel sera installé notre container docker:
mkdir nginx-proxy-manager
Maintenant nous allons créer le script de config docker-compose.yml dans notre dossier nginx-proxy-manager.
cd nginx-proxy-manager/ && nano docker-compose.yml
Nous allons copier dans le fichier le code suivant:
version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' ports: - '80:80' - '81:81' - '443:443' environment: DB_MYSQL_HOST: "db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: "npm" DB_MYSQL_NAME: "npm" volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt db: image: 'jc21/mariadb-aria:latest' environment: MYSQL_ROOT_PASSWORD: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - ./data/mysql:/var/lib/mysql
Il est déconseillé de modifier les aux ports 80 et 443. Le port 81 lui peut être modifier, il sera utilisé pour l’accès à l’interface web de Nginx Proxy Manager (ex http://192.168.1.10:81). Noter qu’il ne vaut mieux pas ouvrir se port dans votre box ou routeur. L’accès à la page d’administration de votre reverses proxy depuis l’extérieur est vivement déconseillé.
Si par exemple vous souhaiter utiliser le port 8080 à la place du 81 pour administrer votre reverse proxy, remplacez – ’81:81′ par – ‘8080:81’.
Pour enregistrer notre script faites
Pour finir, nous allons exécuter le script de déploiement avec la commande:
sudo docker-compose up -d
Le téléchargement des images et leur déploiement va alors débuter. Notez que cette opération peut prendre plusieurs minutes en fonction de votre connexion internet.
Une fois le déploiement terminer vous devriez obtenir les messages suivants:
Creating nginx-proxy-manager_app_1_fab5a3ab86cd ... done Creating nginx-proxy-manager_db_1_19273c3c978f ... done
L’installation est donc terminée. Connectez-vous sur l’adresse IP de votre serveur avec le port d’administration (81 par défaut).
http://192.XX.XX.XX:81
Pour votre première connexion , les identifiants du compte Admin temporaires sont:
Email: [email protected]
Password: changeme
Après connexion il vous sera demandé de créer un compte nouveau compte.
Nous voilà enfin sur l’interface d’administration de Nginx Proxy Manager: