A top-level domain, or TLD, is the final section of a domain name: .com, .org, .net, etc. By customizing our own DNS server, we’ve created TLDs for each of our environments: .dev, .qa, .stg, and .prod. This allows everyone to navigate countless projects across several environments by simply appending the environment name to the hostname in the URL.
To accomplish this, our BIND server named.conf contains entries like:
zone "dev." in {
type master;
file "/var/named/zones/wildcard/dev";
};
That zone file contains a single wildcard CNAME record:
$TTL 3H @ IN SOA dev. root.dev. ( 0 ; serial 3H ; refresh 1H ; retry 1W ; expire 1H ; minimum ); @ IN NS ns.example.biz. * IN CNAME dev.example.biz.
Anything ending in .dev will resolve to this dev.example.biz server, where Apache’s virtualhost configurations will select the appropriate site based on server names and aliases.
This process has worked well for the last couple of years. Everyone knows exactly where to find any project, in any environment, no matter how many thousands of sites we develop and maintain. Also, our sysadmins can quickly distinguish private and public routing for subnets that have external access (i.e. staging and production). Adding or removing .prod from the URL can help troubleshoot a variety of networking issues.
