How do I set up a local domain name in Apache and Ubuntu, eg website.sam?

Solution 1:

It turns out there are quite a few steps involved in getting this working. Here is how I solved it:

  1. Edit /etc/resolve.conf to set your domain name resolution to your local machine by commenting out any existing lines and adding nameserver 127.0.0.1. After this line add another line containing a secondary dns server for resolving other sites, eg nameserver 8.8.8.8. Some program also overwrites this file every time you boot, so you can use chmod 0444 /etc/resolv.conf to prevent this from happening (there might be a better way to achieve this).
  2. Install dnsmasq, and at the end of /etc/dnsmasq.conf add a line address=/your-custom-local-domain/127.0.0.1
  3. Create a new apache site config by placing a file called localdomain into /etc/apache2/sites-available with the text at the bottom of this answer.
  4. Run the following command sudo a2ensite config localdomain.
  5. Reboot apache, and create a new folder in ~/ called Sites.
<VirtualHost *:80>
    ServerName 127.0.0.1
    ServerAlias *.your-custom-local-domain
    VirtualDocumentRoot /home/%2/Sites/%1/
    #ErrorLog /home/%2/logs/error.%1.log
</VirtualHost>

Now any new folder you create in the sites directory should be mapped to foldername.your-custom-local-domain.