My setup exists of one local server that basically hosts Jellyfin and an arr stack.
I only access this server locally with PC, TV and phone, however I might setup a Wireguard based remote access in the future.
Should I use a reverse proxy like Caddy so I can access the different containers with a local domain name like jellyfin.myserver.local?
I am also interested in hosting Adguard home but how can this work together with Caddy, won't they both conflict as a DNS server?
I like the workflow of having a DNS record on my network for *.mydomain.com pointing to Nginx Proxy Manager, and just needing to plug in a subdomain, IP, and port whenever I spin up something new for super easy SSL. All you need is one let's encrypt wildcard cert for your domain and you're all set.
This is exactly how I have mine set up and I really like it.
I’ve got an internal and external domain with a wildcard cert so if it’s a local only service I can easily create a newservice.localurl.com, and if it’s external I can just as easily set up newservice.externalurl.com
I’ve got my domain managed by Cloudflare (yes, I know they’re evil, what company isn’t?), so these instructions will show setup using that, but NGINX Proxy Manager supports a whole bunch of domain services for the HTTP-01 challenge.
With all prerequisites in place, here are the steps:
Log in to your NGINX Proxy Mananger (you can access the service and login at port 81 of the machine hosting it)
In the top menu, click the SSL Certificates tab
Click the Add SSL Certificate button
Choose Let’s Encrypt for the certificate type
In the Add Let’s Encrypt Certificate dialog, input the following
Domain Names: Input the domain root, as well as a wildcard subdomain. You’re entering both domains into the same field. After entering each domain, press the enter/return key on your keyboard to confirm the domain. For example, if you domain is abcde.com, input:
Email Address for Let’s Encrypt: Any valid email address you’d like to use
Toggle the Use a DNS Challenge option on (when you toggle this on, a new set of options will appear)
DNS Provider: Choose yours. I chose Cloudflare
Credentials File Content: Delete the prepopulated dummy api key and paste in your actual api key
Propagation Seconds: I put in 120 to give it two minutes. You can try leaving it blank, but if the DNS records haven’t propagated, you may get an error (I did when I tried leaving it blank during setup).
Toggle on the I Agree to the Let’s Encrypt Terms of Service option
- Click Save
Once you get a success message, you can start creating proxies with NGINX Proxy Manager for your internal domain. To do that you will need the ip address and port you are forwarding the domain to for your lan service. If you are using Docker containers, you’ll need the Docker ip, which you can get from the command line with:
ip addr show | grep docker0
You should get an ip address like 172.17.0.1
Otherwise you’ll just need the ip address of the machine you’re running the service on.
To set up a proxy redirect:
In NGINX Proxy Manager click the Hosts tab/button and then choose Proxy Hosts.
Towards the upper right click the Add Proxy Host button
In the New Proxy Host dialog box, input the following:
Domain Names: input the domain address (subdomain or tld) you wish to use for the service. For example. homepage.abcde.com, then press enter to confirm the domain
Scheme: leave set to http
Forward Hostname/IP: Input either the host machine ip, or the docker ip
Forward Port: Input the appropriate port for the service
Cache Assets: Toggle on
Block Common Exploits: Toggle on
Websockets Support: Toggle on if the service needs websockets
Click the SSL tab of the New Proxy Host dialog box to set up the ssl certificate
In the SSL tab, input the following:
Click the None under SSL Certificate and select your local domain + wildcard subdomain certificate
Toggle on the Force SSL, HTTP/2 Support, HSTS Enabled, and HSTS Subdomains options
Click Save
Once the save is complete you should be able to input the new domain for you lan services and get a secure connection.*
*Bear in mind some services require you to specify a valid domain for the service within the config/settings. Double check any services you may be running for this if you plan to use a reverse proxy with them.
Well, shit. I thought you were gonna write a paragraph with an overview not these awesome and detailed instructions! This is great! Thanks kindly, saved for my next free time of server tweaking.