Another necro-thanks here for this information specifically for NPM. I was going in circles with this, and luckily there were some persistent folks in this thread who offered actual solutions.
For the record, using a reverse proxy doesn't always mean you're exposing those hosts to the internet. I use Nginx Proxy Manager so, like @Indmenity83 said, I don't have to remember a bunch of port numbers, getting granular with my password manager, and most of all, so my browsers stop bugging me about using an insecure protocol. I use a wildcard certificate with DNS challenge, so my internal services are still secured with SSL but never exposed to the internet.
My mother always said not to assume things, because... Well you know.