The below steps go through setting up a custom domain name on your Azure Web App, using the FreeDNS service from NameCheap. Both the www subdomain www.yourdomainhere.com and the naked yourdomainhere.com will be setup.
I have an Azure S1 Small Instance App Service Plan on which I'm running 4 web apps. Originally I had planned to use Azure DNS, to keep everything within the same cloud service, but after some initial attempts formed the opinion that Azure DNS isn't mature enough yet to host production web sites. Azure DNS can currently only be administered from within Azure Powershell - that in itself was enough to put me off using it. If you need to make a quick change to a DNS record, you don't want to be having to run Powershell to do it. Microsoft are working on adding Azure DNS to the Azure Portal, but at the moment it's not available.
I have a couple of domains through NameCheap and for those and a couple of others (with CrazyDomains) I decided to use NameCheap's DNS service. Even when your domain is not registered through NameCheap, they still offer a free DNS service, called FreeDNS.
Note that in the below steps, yourwebappname and yourdomainhere.com should of course be replaced with your specific names.
Step 1. Reduce the TTLs to 5 minutes
Note: you only need to perform this step if you're porting from an existing DNS provider. No need to do this if you're setting up a new web app on a new domain.
Within your current DNS service, setup all the TTL settings (Time To Live) on the DNS records to the minimum (typically 300 seconds, or 5 minutes). This may help in having the DNS changes propagate faster.
After this is done, try to get a full DNS zone file listing. When you port the DNS records to FreeDNS it will help ensure that you don't miss anything. My previous VPS and DNS provider was Linode and I was porting a few web apps from Linode over to Azure web apps.
Step 2. Ensure your Azure web app is running
Ensure your web app is published and running ok at http://yourwebappname.azurewebsites.net
Step 3. Find the IPv4 address of your Azure web app
From a windows cmd.exe prompt ...
C:\> nslookup yourwebappname.azurewebsites.net
Server: UnKnown
Address: 192.168.1.1
Non-authoritative answer:
Name: waws-prod-xxx-xxx.cloudapp.net
Address: 1.2.3.4
Aliases: yourwebappname.azurewebsites.net
waws-prod-xxx-xxx.vip.azurewebsites.windows.net
The nslookup command will provide you with your web app's IPv4 address. This is shown in the second Address field above, e.g. 1.2.3.4. I am running an Azure S1 Small Instance App Service Plan. I believe this method still applies to other plans including shared instance plans.
Note that if your web app is restarted or stopped this may result in it being assigned a different IP address. Be aware of this when using naked domain URLs (without the www prefix) since these rely on the A record being configured for the correct IP address of your web app (as per step 6).
Step 4. Setup FreeDNS
On the NameCheap FreeDNS page, enter yourdomainhere.com and click 'Get DNS'. If its eligible, then click 'Add to Cart', then click 'Set up DNS'.
You get this message from NameCheap :-
N.B. don't go ahead and set the nameservers just yet, that step will come later.
yourdomainhere.com
Congratulations! Your domain/ sub-domain is added to our DNS service.
Please set the nameservers of your domain/ sub-domain to
freedns1.registrar-servers.com
freedns2.registrar-servers.com
freedns3.registrar-servers.com
freedns4.registrar-servers.com
freedns5.registrar-servers.com
Our system will periodically monitor your domain's DNS setting and will activate your domain once it is pointing to our servers.
Step 5. Verify ownership of your domain
In NameCheap, on the Domain List page, once the yourdomainhere.com is listed as active, then need to click on "Authorize DNS" link...
Select the required email, such as admin@yourdomainhere.com to use as the auth email.
On the domain page, the redirect domain setting will show "Your FreeDNS domain is waiting for Authorization or Verification by domain owner."
In the received email, click on the embedded hyperlink and then on the webpage, click the "I AUTHORIZE" hyperlink.
A message should display "Host has been successfully activated".
Step 6. Setup the FreeDNS records
At this step you'll setup all of the DNS records for your domain.
For all of these I left them with the default TTL setting of 'Automatic'.
In NameCheap, on the Domain List page, click the MANAGE button next to your domain, then click on the Advanced DNS tab.
In the Host records, add the A record with the IP that was returned in step 3.
Type Host Value TTL
A @ 1.2.3.4 Automatic
Add any required TXT records (often used for verification).
Add the 3 CNAME records required to verify ownership of the domain to Azure.
1. Set HOST to awverify
Set Target to awverify.yourwebappname.azurewebsites.net
2. Set HOST to awverify.www
Set Target to awverify.yourwebappname.azurewebsites.net
3. Set HOST to www
Set Target to yourwebappname.azurewebsites.net
If required, set the mail setting to Custom MX and add the MX server records...
For example if you have Gmail enabled on the domain you'd use these MX records...
Set Mail to Custom MX
Host Type Priority Mail server name
@ MX 20 ALT1.ASPMX.L.GOOGLE.COM.
@ MX 10 ASPMX.L.GOOGLE.COM.
@ MX 20 ALT2.ASPMX.L.GOOGLE.COM.
@ MX 30 ASPMX2.GOOGLEMAIL.COM.
@ MX 30 ASPMX3.GOOGLEMAIL.COM.
Step 7. Change the DNS nameservers using your registrar
For the case when your registrar is not NameCheap, you'll need to point the nameservers for the domain to the FreeDNS nameservers.
Log into your registrar's website and set the following nameservers, removing the existing nameservers if required ...
freedns1.registrar-servers.com
freedns2.registrar-servers.com
freedns3.registrar-servers.com
freedns4.registrar-servers.com
freedns5.registrar-servers.com
Step 8. Wait for the DNS nameserver change to propagate
You can check whether the changes have propagated yet using nslookup from the windows command line ...
C:\> nslookup yourdomainhere.com
C:\> nslookup www.yourdomainhere.com
C:\> nslookup awverify.yourdomainhere.com
C:\> nslookup awverify.www.yourdomainhere.com
Use nslookup in interactive mode for MX and TXT record lookups ...
C:\> nslookup
set q=mx
yourdomainhere.com
set q=txt
yourdomainhere.com
exit
Or you can also use these great online tools for checking the DNS propagation ...
http://www.whatsmydns.net
https://www.ultratools.com/tools/dnsLookup
Or on Linux I believe the command is: dig yourdomainhere.com
Step 9. Bring the domains into your web app using the Azure Portal
In the Azure portal, go to yourwebappname Web App -> Settings -> Custom Domains and SSL -> Bring External Domains
Enter yourdomainhere.com into the field, and then press tab. Wait for it to verify your CNAME records.
In the next field, enter www.yourdomainhere.com and press tab again. Wait for it to verify your CNAME records.
It should succeed as you tab out of each field, and after you click the save button at the top, it should report "Updating hostname bindings".
Step 10. Test in a browser
Open both www.yourdomainhere.com and yourdomainhere.com in a browser and confirm that they load ok.
Turn on the browser's web developer tools (Network tab) to check that all the components of the web app are loading with HTTP 200 OK status, and are resolving to the new IP address.
Its normal to experience some issues for the first several hours after changing nameservers, for example you may see the domain resolve to the old name server settings or flipping back and forth from new to old. Usually this will settle down after a few hours. It can be caused by the browser caching DNS results, something I've noticed particularly bad in Firefox sometimes. You may also need to flush the DNS cache on the computer you are using.
Flush the DNS cache in windows via:
C:\> ipconfig /flushdns
Other references ...
There is some additional Azure related information in the below post about this subject:
https://azure.microsoft.com/en-us/documentation/articles/web-sites-custom-domain-name/
Follow @dodgy_coder
Subscribe to posts via RSS
FYI: instead of "ping yourwebappname.azurewebsites.net" probably it's better to just do "nslookup yourwebappname.azurewebsites.net" to find the associated IP (v4) address.
ReplyDeleteThanks I have updated that in the post.
DeleteThank you so much sir. It might be out there somewhere, but in all of my reading across the MSFT documentation, I have not found the need for three CNAMEs explained. You rock!
ReplyDeleteYou're welcome, glad it helped! yeah I also found that bits of the MSFT documentation lacking in some areas.
DeleteAh, I was wondering why nothing was happening with my signup, but didn't realize you actually need to have DNS set-up for your domain to sign up for Free DNS in order to get e-mails to admin@yourdomain.com etc., which is pretty silly as the suggested use case for the service is in case your registrar doesn't provide DNS service, which is my case :P
ReplyDeleteThanks for this article, I guess I'm paying an additional $5 to SimpleDNS instead.
Hi Shinmail, thanks for your comment.
DeleteSorry it took me a while to reply here, but I wanted to point out that when you transfer a domain to FreeDNS, you can verify it with FreeDNS afterwards... like 10 days later if you wish. The thing to do in this case is to just go ahead and point the name servers to freedns using your existing basic domain registration tool. 10-15 minutes after doing this, NameCheap's freedns will see this and let you go ahead and add MX records, A records, TXT records - whatever you wish.
I just did this for another new domain of mine and it works ok. Just remember that you will eventually still need to verify the domain with freedns using email - that can be initiated via the Namecheap support (live chat).