Setting up Virtual Hosts
Updated on 28 Dec 2018
Setting up virtual hosts in Apache is a fairly straight forward process, and these steps will help you get there.
Add the domain to the hosts file
An example of my hosts file is shown below.
127.0.0.1 localhost 127.0.0.1 application 127.0.0.1 yii
Create a new site file
/etc/apache2/sites-available, create a new file with the same name as your host. I.e. yii.conf.
<VirtualHost *:80> ServerAdmin admin@localhost DocumentRoot "/var/www/yii" ServerName yii ErrorLog "/var/log/apache2/yii-error.log" CustomLog "/var/log/apache2/yii-access.log" common <Directory "/var/www/yii"> Require all granted </Directory> </VirtualHost>
At a minimum you might want to set up the following parameters.
|ServerAlias||the email address for the server admin|
|DocumentRoot||Typically the location of where your web pages are located|
|ServerName||This will match one of the names in the hosts file|
|ErrorLog||Where the log messages are written to|
|CustomLog||Where normal access messages are written to|
There are many more configuration options available, so by all means check them out here.
Set up the directory tag
You also need to set up the directory tag within your VirtualHost and specify how the directory can be accessed, and what privileges are available. At a basic level, it could look like this
<Directory "/var/www/yii"> Require all granted </Directory>
But we can over-ride many of the settings for individual directories if we want, i.e. log files, access etc. For a simple file, index.html, placed in the the /var/www/yii directory, I can expect an output similar to what is shown below.
Various Apache modules provide additional functionality to the core http webserver. One of these is mod_dir which provides a DirectoryIndex directive which instructs Apache what to do when a client requests a directory without the file.
In the previous example I requested the file directly.
http://yii/index.html. If I omit the filename and only request the directory
http://yii, then I will get a directory listing of all the files and directories available.
turn off indexes
Inside your directory settings, you can remove this behaviour using the options directive.
<Directory "/var/www/yii"> Options -Indexes Require all granted </Directory>
In which case you end up with 404 page not found.
Or a forbidden message if you have autoindex enabled.
[Thu Jan 23 15:52:17.917514 2020] [autoindex:error] [pid 8771] [client 127.0.0.1:48006] AH01276: Cannot serve directory /var/www/yii/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive
There are many options you can set/turn off.
Enabling mod_dir is done with the following command.
sudo a2enmod dir
/etc/apache2/mods-enabled we will see 2 files.
|dir.load||Contains the command to the load the directory modules|
|dir.conf||Contains the default configuration settings for the module|
If we look inside the dir.conf file, we’ll see this.
What this means is that whenever a client requests a directory (no file), Apache will search for index.html, followed by index.cgi, index.pl etc. If Apache finds the file, it will automatically load it; and we can see an example of that below.
You can modify the dir.conf to provide additional files for the DirectoryIndex directive, or you can over-ride the default settings in the virtual hosts file.