Saturday, February 08, 2014

Linux LAMP - Virtual Hosts Configuration

Hello Linuxers this article may be helpful to set-up virtual hosts on a Linux Box.

The purpose of Virtual-hosts is to use different domains or multiple websites being served/hosted from one single web-server e.g. Apache2 and also organize them by directory, this can be done via name-based or IP-based virtual hosts.

In this case I use name-based website on a single ip address.
For example we need one directory on the document root for all files don't mix up in the same folder, so that each host has its own directory to avoid confusion.

Our goal is to make a new host called site1.com - we wish to put all files at /var/www/site1/ and access it via http://www.site1.com or http://site1.com
We know the Document Root is in /var/www/ that is explicit defined in /etc/apache2/sites-enabled/default
Here are the commands to make a virtual-host just repeat to create new ones.

Virtual-host set-up configuration

sudo mkdir -p /var/www/site1/public_html
sudo chown -R $USER:$USER /var/www/site1/public_html
sudo chmod -R 755 /var/www/
sudo nano /var/www/site1/public_html/index.html
1.Inside index.html put this small text, use echo or edit file with nano:
<html>
<head>
<title>www.site1.com</title>
</head>
<body>
<h1>
Success: You Have Set Up a Virtual Host</h1>
</body>
</html>
2.Now we create and add the real virtual-host and directory information entry to Apache2 configuration:
sudo nano /etc/apache2/sites-available/site1
3.inside the file write:
<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName site1.com
        ServerAlias www.site1.com
        DocumentRoot /var/www/site1/public_html
        <Directory /var/www/site1/public_html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog /var/log/apache2/error_site1
        LogLevel warn
        CustomLog /var/log/apache2/access_site1 combined
        ServerSignature Off
</VirtualHost>
4.now we enable this site using a2ensite utility and reload Apache configuration:
sudo a2ensite site1
sudo service apache2 reload
5.To review we created the directory for the website, we gave permissions to the directory, we created a simple index.html, and created virtual-host configuration file and enabled it with a2ensite.
6.To finish we also need some ip-hostname entry to /etc/hosts to recognize this domain, I call it domain aliased to ip-address because we set *:80 in the config file.
On the sites-available/site1 file as you see are important directives like ServerName, ServerAlias and DocumentRoot which give unique identity to the virtual-host.
nano /etc/hosts
7.Edit the file and add an entry at the last line of the file:
127.0.0.1 site1.com www.site1.com

Useful configuration files location:

/etc/hosts - hosts file to define hostname ips and aliases
/etc/php5/ - php5 configuration file is php.ini
/etc/phpmyadmin/ - phpmyadmin directory
/etc/apache2/ - apache2.conf configuration file
/etc/mysql - my.cnf mysql configuration file

Helpers to enable or disable virtual-hosts, modules

#They are activated by symlinking available configuration files from their
# respective *-available/ counterparts. These should be managed by using our
# helpers a2enmod/a2dismod, a2ensite/a2dissite. See
# their respective man pages for detailed information.

# enable site
sudo a2ensite
# disable site
sudo a2dissite
# enable an apache2 module
sudo a2enmod
# e.g. a2enmod php4 will create the correct symlinks in mods-enabled to allow the module to be used. In this example it will link both php4.conf and php4.load for the user
# disable an apache2 module
sudo a2dismod
# force reload the server configuration
sudo service apache2 reload

# useful links for virtual-host information
http://httpd.apache.org/docs/2.2/vhosts/
http://httpd.apache.org/docs/2.2/vhosts/name-based.html
http://httpd.apache.org/docs/2.2/vhosts/examples.html
http://www.centos.org/docs/2/rhl-rg-en-7.2/s1-apache-config.html

No comments: