Hey all,
A while back I set up some instances of Duplicati behind Traefik. I used Traefik’s http auth middleware in front of Duplicati to secure them. (This was before there was any password protection.)
This worked for a long time, but a while back something changed and my instances stopped loading my configuration. At the time I didn’t have the time to dig into it, and nothing was super important about the backups, so I just turned them off and didn’t try to figure it out until now.
Duplicati is running in a Docker container as part of a Swarm Stack. As of my testing today, it’s Duplicati - 2.1.0.4_stable_2025-01-31.
Traefik is on 2.11.
As far as I can tell, if you have the Traefik basic auth middleware enabled for your Duplicati service, after logging in using Duplicati’s UI password, you get a screen like this:
In Firefox’s network inspector, I see a lot of 401 errors.
In the console I see the same errors and can copy them. Here is one:
XHRGET
https://myinstance.mysite.mytld/api/v1/notifications
[HTTP/2 401 101ms]
GET
https://myinstance.mysite.mytld/api/v1/notifications
Status
401
VersionHTTP/2
Transferred176 B (17 B size)
Referrer Policystrict-origin-when-cross-origin
DNS ResolutionSystem
content-length
17
content-type
text/plain
date
Sat, 08 Feb 2025 18:05:17 GMT
www-authenticate
Basic realm="traefik"
X-Firefox-Spdy
h2
Accept
application/json, text/plain, */*
Accept-Encoding
gzip, deflate, br, zstd
Accept-Language
en-US,en;q=0.5
Authorization
Bearer redacted_token
Cache-Control
no-cache
Connection
keep-alive
Cookie
redacted_sessionid; default-theme=ngax
DNT
1
Host
myinstance.mysite.mytld
Pragma
no-cache
Referer
https://myinstance.mysite.mytld/ngax/index.html
Sec-Fetch-Dest
empty
Sec-Fetch-Mode
cors
Sec-Fetch-Site
same-origin
TE
trailers
User-Agent
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0
Anyway, I’m just curious if anyone has any ideas what is going on. Have both the http auth user/password, and Duplicati’s password would be good. Adds an extra layer of defense.
One random thought, could the basic auth be messing with the websockets? Traefik supports websockets automatically, but maybe the middleware doesn’t?