If a self-hosted RudderStack data plane returns 404 at its public URL, check DNS first: make sure the hostname actually resolves to the reverse proxy, because a subtly misspelled record looks exactly like a proxy or app misconfiguration. Then sanity check the backend directly, bypassing the proxy, with a GET on /health (rudder-server serves no homepage at /, so 404 there tells you nothing). Only after DNS and direct access work should you debug Traefik router rules and the loadbalancer port (8080 by default).

Context: GitHub issue rudderlabs/rudder-server#6353 (closed, 13 comments): a self-hosted RudderStack on Docker behind Traefik returned 404 page not found on the public URL no matter what the reporter tried: isolated container, shared networks, double-checked Traefik config. Everything looked right. The actual cause was a one-character difference in the DNS record, so the hostname never reached Traefik at all, and the reporter confirmed it works after fixing the DNS.