If you run more than one service, each can have its own subdomain under the same domain. play.example.com, creative.example.com and map.example.com all come from one registration and cost nothing extra.
A typical set
| Name | Points at | Records |
|---|---|---|
play | The main server or the proxy | A plus an SRV to hide the port |
creative | A second instance | A plus its own SRV |
bedrock | The Geyser listener | A — Bedrock clients enter the port manually |
map | A web map | A, and this one may be proxied |
What to do
- Create one A record per name
Each points at the address of the service it names. Several names can point at the same address — that is normal and costs nothing.
- Add an SRV record for each Java server
_minecraft._tcp.<name>, with that service's port. This is what lets people type the name with no port after it. - Keep the SRV target pointing at its own A record
_minecraft._tcp.creativetargetscreative.example.com, not the bare IP. Mixing these up is the usual reason one name works and another does not. - Test each one from a client that has never used it
DNS caches per name. A name that works for you may simply be cached from an earlier test.
Minecraft traffic must not go through Cloudflare's proxy. A web map is ordinary HTTP, so it can — and putting it behind a proxy hides the server's address, which is usually what you want. Just do not apply the same setting to the game records.
A second name you already own and control gives you somewhere to move traffic if you ever need to, without waiting on DNS propagation at the worst possible moment.
Each name connects to its own service with no port typed, and a query against a public resolver returns the record you expect for each.