Nextcloud behind Traefik - not loading, works fine with direct internal access

Hello everyone,

I'm having an issue with Nextcloud running behind Traefik as a reverse proxy. The login page loads but without any CSS/JS styling (JavaScript required message), while accessing Nextcloud directly via internal IP works perfectly.

Setup details:

  • Nextcloud container: lscr.io/linuxserver/nextcloud:latest

  • Traefik version: [Your Traefik version]

  • Domain: nubel.vqk.ddnsfree.com

  • Network: Both containers on same Docker network (traefik_network)

Nextcloud docker-compose:

yaml

Copy

Download

services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloudl
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
      - OVERWRITEPROTOCOL=https
      - TRUSTED_PROXIES=192.168.0.0/16 172.16.0.0/12 10.0.0.0/8
    volumes:
      - /media/uhdd1/dserver2/docker/nextcloudl/config:/config
      - /media/uhdd1/dserver2/docker/nextcloudl/data:/data
    networks:
      - traefik_network
    restart: unless-stopped

Nextcloud config.php (relevant parts):

php

Copy

Download

'trusted_domains' => [
  0 => '192.168.1.5:8085',
  1 => 'nubel.vqk.ddnsfree.com',
  2 => 'nextcloudl',
],
'overwrite.cli.url' => 'https://nubel.vqk.ddnsfree.com',
'overwriteprotocol' => 'https',
'trusted_proxies' => [
  '192.168.1.0/24',
  '172.19.0.0/16',
  '172.17.0.0/16',
  '127.0.0.1',
],
'forwarded_for_headers' => ['HTTP_X_FORWARDED_FOR'],

Current Traefik configuration:

yaml

Copy

Download

http:
  routers:
    nubel:
      rule: "Host(`nubel.vqk.ddnsfree.com`)"
      service: nubel
      entryPoints:
        - websecure
      tls: {}
      middlewares:
        - nextcloud-headers

  services:
    nubel:
      loadBalancer:
        servers:
          - url: "https://nextcloudl:443"
        serversTransport: nextcloud-transport
        passHostHeader: true

  middlewares:
    nextcloud-headers:
      headers:
        customRequestHeaders:
          X-Forwarded-Proto: "https"
          X-Forwarded-Host: "nubel.vqk.ddnsfree.com"
          X-Forwarded-Server: "nubel.vqk.ddnsfree.com"
        host: "nubel.vqk.ddnsfree.com"
        sslRedirect: true

  serversTransports:
    nextcloud-transport:
      insecureSkipVerify: true

What I've tried:

  • Added trusted_proxies and overwriteprotocol in Nextcloud config

  • Added custom headers middleware in Traefik

  • Tried both HTTP and HTTPS backend URLs (http://nextcloudl:80 and https://nextcloudl:443)

  • Checked browser dev tools - static assets (CSS/JS) return 200 OK but don't render properly

  • Accessing Nextcloud directly via https://192.168.1.5:8443 works perfectly

Question:
What am I missing in my Traefik configuration to properly serve Nextcloud's static assets? Are there any specific headers or middleware settings required for Nextcloud when using HTTPS backend?

Thank you for your help!

Have you tried without using nextcloud-headers?

Hi,

I've already tried it in every possible way (more or less all options) and I always get the same result. Here is my configuration:

text

Works for me:

services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloud
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - ./nextcloud/config:/config
      - ./data:/data
    restart: unless-stopped
    networks:
      - proxy
    labels:
      - traefik.enable=true
      - traefik.http.routers.nextcloud.rule=Host(`nextcloud.example.com`)
      - traefik.http.services.nextcloud.loadbalancer.server.port=80

networks:
  proxy:
    name: proxy
    external: true

hello thank you for responding I use a simple docker to run nextcloud=

version: "2.1"
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloudpru
ports:

9084:80
environment:

PUID=1000

PGID=1000

TZ=Europe/Madrid
volumes:
/media/uhdd1/dserver2/docker/nextcloudl/data/config:/config
/media/uhdd1/dserver2/docker/nextcloudl/data:/data
networks:
traefik_network
restart: unless-stopped

networks:
traefik_network:
external: true

and traefik cloud.yml

http:
routers:
cloudl:
rule: "Host(cloudl.vqk.ddnsfree.com )"
service: cloudl
entryPoints:

websecure
tls: {}
middlewares:

nextcloud-security

nextcloud-headers

services:
cloudl:
loadBalancer:
servers:

NOW: HTTPS to port 443 of the nextcloud container
url: " https://nextcloudl:443 "
serversTransport: nextcloud-transport

I am exposed to the internet so all traffic goes through port 443 in traefik

Traefik Configuration
Enable the dashboard without authentication (only for development)
api:
insecure: false

Transport configuration for backend connections
http:
serversTransport:
keepAlive:
enabled: true
interval: "30s"
timeout: "5s"

Entry points
entryPoints:
web:
address: ":80" # HTTP (for redirection to HTTPS)
--- ADD THESE LINES ---
forwardedHeaders:
trustedIPs:
"172.19.0.0/16"

You go through port 443 to Traefik but why do you need to use https://nextcloudl:443? You’re getting a certificate for cloudl.vqk.ddnsfree.com but that’s your docker host, not your nextcloud container.

See Nextcloud behind Traefik2 - how? - #2 by wollomatic