Create Virtual Host conf
Today we will be creating virtual host on Apache2 web server. As one Apache2 web server can serve multiple websites
we can later add more configs and tell Apache2 web server to serve all the websites from single unix instance. I will
assume that the name of our webserver is website.dev
First create a config file:
sudo nano /etc/apache2/conf.d/sites-available/website.dev.conf
and paste the following configuration into that config file.
<VirtualHost *:80>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride ALL
Order allow,deny
allow from all
</Directory>
DocumentRoot /var/www/website.dev/public/
ServerName website.dev
ServerAlias www.website.dev
ServerAdmin webmaster@website.dev
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Save. This is one of the most basic configurations where we are telling apache to use this config if it catches any request
coming to ServerName website.dev
or www.website.dev
on port 80. It also tells apache to serve files from folder
/var/www/webiste.dev/public/
and who is the admin of this server. Apache2 on its own creates a bunch of logs that could
be helpful in the future, and therefore we are telling it to store this website specific error logs and access logs in
specific locations.
Activate Virtual Host conf
Now the apache might have many predefined available config in etc/apache2/sites-available
folder, but not all of them
might be active at the moment. Therefore, we create a symlink into /etc/apache2/sites-enabled
sudo ln -s /etc/apache2/sites-available/website.dev.conf /etc/apache2/sites-enabled/website.dev.conf
Add new Virtual Host to systems hosts file
We will add the following line to the bottom of the /etc/hosts
file
127.0.0.1 website.dev
Update apache default conf file
The location of apache2 conf file depends on the system you are using. In debians like Ubuntu it is usually
in /etc/apache2/apache2.conf
file but in Centos systems it resides at /etc/httpd/httpd.conf
file. Alternatively, if
you installed apache in unstandard way it may live in different location. Therefore, make sure to edit the correct
apache2 conf file.
Open the apache2 default conf file:
sudo nano /etc/apache2/apache2.conf
and add the following to the bottom of it:
ServerName localhost
ServerSignature Off
ServerTokens Prod
IncludeOptional conf.d/sites-enabled/*.conf
The first line makes the current folder settings default to localhost only.
The second line will hide the apache version the operating system and installed extensions in response headers, which you want to do so that hackers will not know what software you are using to run your webserver.
The third line will set tokens to production level security.
Finally, the fourth line will add our sites-enabled
folder full of our virtual hosts to this main default config.
Activate changes on Apache
and to take effect of all these changes we will restart apache2 webserver
service apache2 restart
Enjoy your server serving your websites!