I use Crafty Controller for Minecraft. I have a server running at 192.168.50.16:25540. I want it to resolve to minecraft.example.com. I have Nginx Proxy Manager setup for my domain and can access it from inside my network, but it’d be nice to be able to use a domain instead.
NPM only has options for http and https, so is this even possible using NPM?
EDIT: this is for only internal access I have external access via tailscale.
NPM won’t help you here. As you said, it’s only for http. You will have to set up port forwarding in your router. But as far as I recall Minecraft changes its port with every game. So you could either change that in your router every time you start another game.
But it would be better (for security as well) to set up a VPN. Many routers actually have that built in.
That is, if your goal is to have your Minecraft server reachable through the internet.
For DNS you will need a Dynamic DNS service to let the name always point to your public IP. For this as well many routers have built-in functionality. Maybe even a preferred service.
With Crafty you can bind a specific port.
I use tailscale for public access, and have set it up so tailscale users can access the domain.
I guess what I’m asking for is NPM but for tcp.
Regular nginx does this just fine https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/
Keep in mind that you can’t route tcp by hostname, because hostname is not a property of tcp. It only knows IP addresses. Host routing requires a protocol like HTTP.