Apache is up and running. Now we need to set-up multiple sites (virtual hosts) on Apache2. Below we walk through a baseline vhost file and set-up.
Edit the apache config file, I am a huge fan of nano, but you can easily use vim or another. If you new to text editors in Linux Nano is a nice simple easy to use interface https://wiki.gentoo.org/wiki/Nano/Basics_Guide
sudo nano /etc/apache2/apache2.conf
Add the below lines to the bottom of the conf file. For more information on the AcceptFilter option please visit Apache Docs https://httpd.apache.org/docs/2.4/mod/mpm_winnt.html
If your interested in diving deepers into Apache configuration options https://httpd.apache.org/docs/2.4/sections.html
Remember to restart Apache;
Servername localhost
AcceptFilter http none
service apache2 reload
Now we need to set up virtual host files in Apache. This will allow us to future proof the set-up so we can run multiple domains and code bases from our local machine.
cd /etc/apache2/sites-available/
sudo nano sitename.local.conf
Create a virtual host file for your new domain {sitename.local} the name of the file MUST match your doamain name with a .conf on the end.
Make sure to change the locations for the documents to match the folder location on your windows machine that your hosting your web files from.
Remember when your using the Ubuntu CMD you need to use the /mnt/c/ path to access your Windows files. As long as you map them by using the /mnt/c/ path then Linux and Windows file systems will talk to eachother.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName sitename.local
ServerAlias *.sitename.local
DocumentRoot /mnt/c/www/sitename.local
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /mnt/c/www/sitename.local>
Options Indexes FollowSymlinks MultiViews
AllowOverride All
# Order allow,deny
# Allow from all
Require all granted
</Directory>
</VirtualHost>
The above is a baseline vhosts file I recommended that will cover most major framework needs. However vhosts files can be fine tuned for those who are interested to have a further read and to play around https://httpd.apache.org/docs/2.4/vhosts/examples.html
Save the file and enable the virtual host in Apache.
sudo a2ensite sitename.local.conf
sudo service apache2 reload
If you get an error from Apache open the conf file and check the spelling and for any typos. Also check that the conf file has the same name as the domain its related to. Any spelling mistakes will make Apache throw and error and therefore not be able to enable the site. 95% of errors in Apache will be spelling errors so triple check. Don’t be put off by failures once you correct the conf file Apache will run as expected.
You will also need to add the domain to the hosts file of Ubuntu and Windows. Make sure you edit the file using sudo or sudo -i
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.0.1 sitename.local
Check your windows host file has the correct entries. You can open Notepad as administrator and then navigate to c:\Windows\System32\drivers\etc\hosts
You can also open the hosts file from the command line but don’t forget to invoke admin privileges.
It is best to create a www folder outside of the Ubuntu root and symlink it. Have a look at mnt folder and you should see the letters of your Windows drives represented. Create a directory on the drive you want to store your web development files.
cd /mnt
ls -la
mkdir /mnt/c/www/html
We then need to symlink the directory to our ubuntu web root. This will then mean our web root is now pointing to a folder outside of the Ubuntu subsystem. If there are any problems with the Ubuntu package and you need to reinstall the www folder will not be affected now as it lives outside of Ubuntu.
ln -s /mnt/c/www/html /var/www/html
For any further domains you want to use just follow the above template making the adjustments for the domain and document. Certain frameworks can and generally will require unique settings in the conf file so be sure to check for any of these when setting up a new framework.
The settings included above give you a baseline to start with. From here you can just modify how you need to for any specific needs for each project. If this is your first time writing a vhosts file don’t worry, the above settings will be more then enough for your needs the majority of the time.
Where does Ubuntu File system live?
I have written a blog post covering the topic of Ubuntu file location in Windows and Windows file system in Ubuntu. https://aimeemaree.com/ubuntu-files-on-windows-10/