FL1GHT5 Lab • Networking

Set Up a Reverse Proxy with Nginx Proxy Manager

Who This Is For

Intermediate.

Think of it like a hotel concierge. Guests don't need to know which floor or room number a service lives on, they just say the name and the concierge quietly sends them to the right door.

What You'll Build

Access self-hosted services through a readable hostname instead of a raw IP and port number.

Prerequisites

What a Reverse Proxy Does

It routes incoming requests to internal services by hostname, issues and renews TLS certificates, and can apply access controls in one place, instead of every service handling its own TLS and exposure separately.

Local-Only vs. Public Reverse Proxy

Deciding to expose a service publicly should be an intentional, service-by-service decision, not a default. Most homelab services are better kept local-only or behind a VPN (see Tailscale vs. WireGuard).

Deploy Nginx Proxy Manager

$services:
$ npm:
$ image: jc21/nginx-proxy-manager:latest
$ ports:
$ - "80:80"
$ - "81:81"
$ - "443:443"
$ volumes:
$ - ./data:/data
$ - ./letsencrypt:/etc/letsencrypt

Create a Shared Docker Network

Put NPM and the services it proxies on the same Docker network so it can reach them by container name.

$docker network create proxy-net

Add a Proxy Host

In the NPM UI: Hosts → Proxy Hosts → Add. Set the domain name, forward hostname/IP (the container name on the shared network), and forward port. Enable WebSocket support for apps that need it (chat tools, some dashboards).

TLS Options

What Should Stay VPN-Only

Security & Backup Notes

Troubleshooting

Lab Finish Line

A local application accessible through a readable hostname rather than a raw IP and port.

What to Build Next

Planning a business implementation?

Explore our infrastructure and systems services.

View services