Problème de connexion à Nextcloud via l’application mobile

Contexte

Il y a quelque temps, j’ai changé de reverse-proxy. Je suis passé de SWAG à Traefik.

Problème

Avec Traefik, j’ai eu des problèmes pour rendre accessible Nextcloud. Au début, c’était par ce que mon conteneur Nextcloud était en HTTPS et Traefik voulait gérer les certificats par lui même.

J’ai donc mis Nextcloud en HTTP pour contourner ce problème. Si vous avez d’autres solutions, les commentaires sont les bienvenues.
 
Après ça, je pouvais me connecter à NextCloud via mon navigateur web bien que j’avais ce genre de problème :

Exemple de log que j’avais sur la page :

Content-Security-Policy : Les paramètres de la page ont empêché le chargement d’une ressource (img-src) à l’adresse http://nextcloud.mon_domaine.com/apps/mail/img/mail-dark.svg car elle enfreint la directive suivante : « img-src 'self' data: blob: https://*.tile.openstreetmap.org https://192.168.x.x:mon_port »

Mise à part cette affichage, tout fonctionne bien. Mais ce n’est pas le cas pour la connexion avec le téléphone, qui renvoyait en boucle :

Mode strict : aucune connexion HTTP n'est autorisée

Solution

Application mobile

Pour le problème avec le téléphone, j’ai réussi à régler le problème en ajoutant un middleware à mon routeur Traefik, comme ça par exemple :

http:
  routers:
    nextcloud:
      rule: "Host(`nextcloud.mon_domaine.com`)"
      service: nextcloud-service
      entryPoints:
        - websecure
      tls:
        certResolver: mon_certResolver
      middlewares:
        - nextcloud-headers

  services:
    nextcloud-service:
      loadBalancer:
        servers:
          - url: "http://nextcloud:80"

  middlewares:
    nextcloud-headers:
      headers:
        customRequestHeaders:
          X-Forwarded-Proto: "https"

En faisant ça, le middlewares permet de prévenir NextCloud que c’est Traefik qui gère le HTTPS, donc il n’y a pas de problème de sécurité.

Si vous ne faites pas comme moi, à utiliser les fichiers dynamiques de Traefik, mais que vous passez par les « labels » dans le fichier « docker-compose.yml », voici un équivalent :

labels:
      # Active Traefik pour ce conteneur
      - "traefik.enable=true"

      # ROUTEUR : règle d’hôte (domaine)
      - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.mon_domaine.com`)"
      - "traefik.http.routers.nextcloud.entrypoints=websecure"
      - "traefik.http.routers.nextcloud.tls=true"
      - "traefik.http.routers.nextcloud.tls.certresolver=mon_certResolver"

      # MIDDLEWARE : envoie l’en-tête X-Forwarded-Proto
      - "traefik.http.middlewares.nextcloud-headers.headers.customrequestheaders.X-Forwarded-Proto=https"

      # Attache le middleware au routeur nextcloud
      - "traefik.http.routers.nextcloud.middlewares=nextcloud-headers"

Affichage NextCloud

Pour l’affichage côté NextCloud via le navigateur, il suffit d’aller dans le fichier de configuration de NextCloud, dans « www/nextcloud/config/config.php » par exemple.

Ensuite, il suffit d’ajouter ces deux lignes dans le array de  « $CONFIG = array () » :

'overwritehost' => 'nextcloud.mon_domaine.com',
'overwriteprotocol' => 'https',

Grâce à ça, NextCloud va rechercher les fichiers dont il a besoin en se basant sur votre domaine et le protocole que vous utilisez (https).
Dans mon cas, sans ça, il essaie de récupérer les fichiers sur « https://192.168.x.x:mon_port » alors que comme je l’ai expliqué au début, mon Nextcloud local utilise http, pas https, donc c’est normal qu’il ne les retrouve pas.

De plus, dans une logique où l’application doit être accessible depuis l’extérieur, ça n’a aucun sens de basé sur une ip comme « 192.168.x.x » qui est une ip locale.
D’où le fait de mettre notre nom de domaine.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *