nginx redirect à conteneurs docker
avant de poster ma question, je voudrais savoir si il est encore possible d'obtenir ce que je veux.
J'ai, disons, de myserver.com l'exécution d'un conteneur docker avec nginx & letsencrypt. Sur le même serveur de 2 autres conteneurs docker sites en cours d'exécution.
Pour l'instant tout est redirigée correctement, de sorte www.myserver.com va pour le panneau 1 et site2.myserver.com va à docker 2.
Je voudrais avoir toutes les communications de l'exécution sur HTTPS, mais c'est ici que commence la difficulté.
Donc, ma question est: est-il possible pour le menu fixe avec nginx et letsencrypt pour se connecter à un autre menu fixe à l'aide de certificats de letsencrypt?
Pour moi, il semble être une sorte de " man-in-the-middle "attaque".
Un peu plus schématique:
Accédez à http://site2.myserver.com -> nginx redirige vers https://site2.myserver.com -> se connecter à conteneur 2 (192.168.0.10) sur le port 80.
Ou une autre option:
Accédez à http://site2.myserver.com -> nginx redirige vers https://site2.myserver.com -> se connecter à conteneur 2 (192.168.0.10) sur le port 443 avoir l'site2.myserver.com les certificats.
Si elle ne peut pas être fait, quelle est la solution alors? La copie des certificats pour les conteneurs docker et de les faire courir https, de sorte qu'une requête http obtient redirigé vers le port https de ce conteneur?
Accédez à http://site2.myserver.com -> nginx transmet la requête -> se connecter à conteneur 2 (192.168.0.10) sur le port 443 avoir l'site2.myserver.com les certificats.
Grâce,
Greggy
OriginalL'auteur Greggy | 2016-12-21
Vous devez vous connecter pour publier un commentaire.
Ce que je comprends de votre reverse proxy nginx est sur le même réseau que les conteneurs, il n'y a pas besoin de beaucoup pour sécuriser la connexion entre eux avec TLS (comme c'est un réseau privé et si un attaquant a accès à ce réseau il aurait accès au serveur, trop, et toutes les données non chiffrées).
Si vous voulez absolument des certificats valides pour sécuriser les connexions sur votre réseau local, vous pouvez créer d'autres sous-domaines qui résolvent les IPs locales. Ensuite, vous aurez besoin d'utiliser le DNS manuel option pour obtenir votre certificat (ce qui est un certbot option où vous devez entrer manuellement une clé comme un TXT entrée pour votre domaine).
Exemple de configuration de Nginx pour la redirection http vers https
Vous pouvez utiliser la configuration de Nginx pour retourner un code de 301 état de la redirection vers la page HTTPS
Cela ne fonctionne pas pour moi 🙁 Il redirige vers la nginx conteneur sur son propre port 443. C'est ce que j'ai: site2.myserver.com { serveur 192.168.0.13:8069; } serveur { server_name site2.myserver.com; listen 80 ; return 301 site2.myserver.com$request_uri; location / { proxy_pass site2.myserver.com; }} Avoir l'emplacement " / " ou pas, ne fait aucune différence. Quand j'enlève le "retour 301" http connexion est établie avec le conteneur. Donc, dès que la connexion est chiffrée, il pointe son propre et de ne pas le contenant.
...la première ligne doit être: en amont site2.myserver.com { serveur 192.168.0.13:8069; }
Oui, vous aurait besoin d'un autre serveur avec la configuration HTTPS
OriginalL'auteur Paul Trehiou
Je voudrais aller avec la sortie de la boîte solution:
JWilder Nginx + Permet De Chiffrer.
Nous avons d'abord commencer NGINX Conteneur en tant que Reverse Proxy:
Prochaine, nous commençons la Permet de Chiffrer Conteneur:
Pour vos Sites web, vous avez besoin de quelques variables d'Environnement à définir:
La Nginx conteneur de créer une nouvelle entrée dans sa config, et la permet de chiffrer des conteneurs demander un certificat (et ne le renouvellement des trucs).
Plus: Nginx+LetsEncrypt
Bien sûr, si vous voulez apprendre à régler ce genre de choses de la terre que ce n'est pas la meilleure solution 🙂 Mais il faudra beaucoup de temps pour créer ce type d'installation (enregistrement à chaque nouveau conteneur, ajuster nginx tmpl, demande de certificat ssl..)
Merci pour votre réponse, mais je me retrouve de nouveau avec le même problème. En allant vers le port 80 du serveur web, je peux voir le Tutum de page par défaut, de sorte que la redirection vers la tutum conteneur fonctionne très bien. Si vous allez à la page https, j'ai l'erreur "impossible de se connecter'.
OriginalL'auteur opHASnoNAME
Ici est ma façon de faire:
NGINX fichier de configuration (par défaut.conf)
En utilisant le panneau de l'image de https://github.com/KyleAMathews/docker-nginx, j'ai fait la coutume de fichier par défaut comme suit:
Dockerfile
Voici mon Dockerfile, considérant que mon contenu statique est sous html/annuaire.
Tests
Local de test, modifiez le fichier /etc/hosts en ajoutant myhost.com à l'adresse 127.0.0.1 et exécutez la commande suivante:
curl-je http://www.myhost.com/
Résultat
OriginalL'auteur Leandro Melo de Sales
Bon, j'ai enfin pu obtenir ce que je voulais en fusionnant les réponses de opHASnoNAME et Paul Trehiou. Ce que j'ai fait comme un supplément pour opHASnoNAME de réponse est de monter un système de fichiers entre les nginx et le letsencrypt docker. Il permet de lier les fichiers de configuration de nginx pour le droit des certificats (voir plus loin).
C'est ce que j'ai fait:
Puis exécuter n'importe quel récipient avec un serveur web; aucun besoin de définir la LETSENCRYPT variables. Mon actuel de conteneurs peut être atteint sans les fixer.
La jwilder/nginx-proxy liste de tous les conteneurs dans /etc/nginx/conf.d/par défaut.conf. Ne pas ajouter quoi que ce soit dans ce fichier, car il sera remplacé au prochain redémarrage.
Créer pour chaque serveur d'un nouveau .conf fichier dans le même répertoire. Ce fichier contiendra le https de l'information, tel que suggéré par Paul Trehiou. J'ai créé pour exemple site2.conf:
La proxy_pass adresse est quelque chose que vous pouvez prendre de la valeur par défaut.fichier conf, les adresses IP sont répertoriés pour chaque conteneur.
Pour être en mesure de sauvegarder ces .fichiers de conf, je vais refaire mon nginx conteneur et de monter un système de fichier local /etc/nginx/conf.d. Il va rendre la vie plus facile si le conteneur ne démarre pas en raison d'une erreur dans le .fichiers de conf.
Merci beaucoup tout le monde pour vos commentaires, le puzzle est complet maintenant 😉
OriginalL'auteur Greggy