Thanks for the screenshots and the folder, that helps a lot. Let’s reset this mentally, not the system, and go step by step in the correct order.
Step 1 – DuckDNS (already done)
DuckDNS is working. Leave it alone.
It does not need to be on bridge and is not part of the routing path. No changes needed here.
Step 2 – Jellyfin container name (this matters)
Docker is very strict with names.
In your screenshots, Jellyfin appears as Penguinsjellyfin, but elsewhere it’s referenced as jellyfin.
Nginx Proxy Manager can only talk to the exact container name.
You must choose one:
- Either update NPM to forward to
Penguinsjellyfin
- Or rename the Jellyfin container to
jellyfin and use that everywhere
If the names don’t match exactly, it will never route correctly.
Step 3 – Nginx Proxy Manager routing
Once the name matches, set the proxy host like this:
- Domain:
benshoff.duckdns.org
- Scheme:
http
- Forward Hostname: (exact Jellyfin container name)
- Forward Port:
8096
- Websockets: ON
Do not use:
- ZimaOS IP
- localhost
- port 8097
Step 4 – Test routing before SSL
Before touching SSL again, test:
https://benshoff.duckdns.org
No port.
If Jellyfin loads, routing is fixed.
Step 5 – SSL (last step)
You previously hit the Let’s Encrypt rate limit, so SSL may still show red even if issued.
Do not keep reissuing certs until the cooldown has fully passed.
Once routing is confirmed and the cooldown is over, issue one certificate for:
benshoff.duckdns.org
That’s it. One step at a time, in this order.
Nothing here requires a reset or reinstall, this is just name matching + timing.