[Docker] cozy derrière reverse-proxy Nginx => erreur 301


#1

Bonjour à tous,

J’utilise actuellement un reverse proxy pour accéder aux appli de mon serveur, j’ai installé nginx avec cette commande : docker run -d --restart=always -p 80:80 -p 443:443 --name nginx-proxy --env 'DEFAULT_HOST=www.domaine.fr' --env 'MAX_UPLOAD_SIZE=200M" dmplce/nginx-proxy-letsencrypt
Ensuite je lance cozy comme ceci : docker run -d --name cozy -e VIRTUAL_HOST="cozy.domaine.fr" -e LETSENCRYPT_HOST="cozy.domaine.fr" -e LETSENCRYPT_EMAIL="cozy@domaine.fr" cozy/full

Tout ce passe comme prévu, rien de particulier dans les logs (chez nginx comme chez cozy), mais quand j’accède à l’URL, j’ai une erreur 301 (redirection permanente) !!

J’ai d’autres services comme ghost et owncloud qui fonctionnent parfaitement sur mon serveur (eux aussi derrière nginx)

Si quelqu’un a une idée pour faire avancer mon problème, je suis prêt à donner plus de détails si il en manque…


#2

Hello @pachek,

Bienvenue à bord du nuage :smile:

Est-ce que tu essaies bien de te connecter à ton Cozy en httpS ? De mémoire, l’image Docker de Cozy contient elle-même un reverse-proxy Nginx qui veille à ce qu’on ne puisse se connecter qu’en https, et redirige toutes les tentatives de connexion sur le port 80 vers le 443.


#3

Merci @Clochix !
Oui c’est bien ce que j’essaye de faire…

Et le fait que tu soulèves ce point me fait penser à qqchose : est ce que ça ne serait pas ça qui poserait problème ? (le fait d’avoir 2 reverse proxy en série)
J’essaye sans mon Nginx et j’édite ce post


#4

Est-ce que tu peux regarder précisément ce que fait la 301 ? De quelle URL vers quelle URL est-ce qu’elle te redirige ?


#5

Voici un aperçu d’un wget sur mon site :

–2016-07-19 18:43:31-- https://cozy.domaine.fr/
Résolution de cozy.domaine.fr (cozy.domaine.fr)… xxx.xxx.xxx.xxx
Connexion à cozy.domaine.fr (cozy.domaine.fr)|xxx.xxx.xxx.xxx|:443… connecté.
requête HTTP transmise, en attente de la réponse… 301 Moved Permanently
Emplacement : https://cozy.domaine.fr/ [suivant]
–2016-07-19 18:43:32-- https://cozy.domaine.fr/
Réutilisation de la connexion existante à cozy.domaine.fr:443.
requête HTTP transmise, en attente de la réponse… 301 Moved Permanently
Emplacement : https://cozy.domaine.fr/ [suivant]


#6

Tout cela ressemble à un problème de configuration au niveau de NGinx, comme si le reverse proxu redirigeait vers lui-même.
Est-ce que ton premier reverse redirige bien vers le port 443 du second ?
Si tu vais moyen d’essayer sans le premier reverse, cela te fournirait peut-être des pistes…


#7

sans mon reverse proxy cela fonctionne très bien …

Une autre solution est de déactiver le nginx de container cozy grâce à la var d’environnement DISABLE_SSL=true
la solution était en fait disponible sur le github : https://github.com/cozy-labs/cozy-docker/issues/1

Merci tout de même pour le temps passé à chercher @Clochix :slight_smile:


#8

Bonjour,

Je me permets de me greffer à ce sujet car je rencontre un problème identique mais dans un contexte légèrement différent.

J’ai un cluster de raspberry pi sur lequel je fais tourner quelques applications. Je suis en train de rajouter un nouveau à ce cluster avec Cozy. L’installation du nouveau fonctionne mais je n’y ai apporté aucune configuration spécifique (pas de certificat par exemple).

Dans ce cluster, j’ai un noeud qui me sert de reverse proxy (nginx) pour toutes les requêtes entrantes et qui se chargent notamment de la configuration HTTPS pour toutes les applications. Je redirige toutes les requêtes en HTTP vers du HTTPS.

Mon problème est que, comme pachek, mes requêtes en direction de Cozy me retournent des 301 et me redirigent vers elles-même. Sauf que mon Cozy n’étant pas démarré dans un container, je ne peux pas utiliser sa solution.

Je souhaiterais donc savoir s’il existe un moyen de faire cohabiter les 2 instances de nginx (la mienne et celle de Cozy) ? Est-ce que dupliquer mon certificat sur le noeud cozy a un sens et pourrait m’aider ? À défaut, puis-je désactiver la configuration HTTPS de Cozy ?

Merci pour vos éclaircissement.


#9

Hello @pvardanega,

Bienvenue à bord du nuage douillet :smile:

Dans ton cas, tu n’as pas besoin du NGinx sur le serveur hébergeant ton Cozy. Le serveur NGinx sert essentiellement à gérer TLS, et ton reverse proxy s’en charge déjà.
Il suffit que tu ajoutes à ton reverse proxy un hôte virtuel pour Cozy, qui redirigera toutes les requêtes arrivant sur le port 443 pour le domaine de ton Cozy vers le port 9104 de la machine hébergeant le serveur.
Sur le serveur où est ton Cozy, vire NGinx et installe un pare-feu pour autoriser les connexions sur le port 9104 depuis le proxy.
Tu peux adapter cette configuration (la fin du fichier, avec la configuration pour le port 80, concerne Let’s Encrypt, donc je pense que tu n’en auras pas besoin).

Si tu as d’autres questions, n’hésite pas !

PS : as-tu vu que nous mettons en place de nouveaux outils pour communiquer avec celles et ceux d’entre vous qui hébergent leur propre serveur ?


#10

Merci beaucoup, cela semble fonctionner à merveille :+1:


#11

Parfait :smile:

N’hésite pas à nous faire des retours sur ta configuration et ton utilisation de Cozy.

(et n’oublie pas de virer NGinx du serveur qui héberge ton Cozy, ça libérera un peu de place ;-))