Apache Name Based VirtualHost Example

Q. Can you give or specify an example for Apache name based VirtualHost feature under CentOS/ RHEL / Fedora Linux?

A. The term Virtual Host refers to the practice of maintaining more than one web site on one Apache machine or server.

The NameVirtualHost directive is a required directive if you want to configure name-based virtual hosts.

With the NameVirtualHost directive you specify the IP address on which the server will receive requests for the name-based virtual hosts. This will usually be the address to which your name-based virtual host names resolve.

Apache 2 Name based virtualhost Configuration

For example if your IP address is 203.54.2.5. Set it as follows in httpd.conf file:
# vi /etc/httpd/conf/httpd.conf
Set NameVirtualHost as follows:
NameVirtualHost 203.54.2.5:80
Let us see how your virtual host entry looks for two domains called theos.in and nixcraft.com . Code for theos.in domain:
<VirtualHost theos.in/>
ServerAdmin [email protected]
DocumentRoot /var/www/theos.in
ServerName theos.in
ServerAlias www.theos.in
ErrorLog /var/logs/httpd/theos.in/error_log
CustomLog /var/logs/httpd/theos.in/access_log common
</VirtualHost>

Code for nixcraft.com domain:
<VirtualHost nixcraft.com/>
ServerAdmin [email protected]
DocumentRoot /var/www/nixcraft.com
ServerName nixcraft.com
ServerAlias www.nixcraft.com
ErrorLog /var/logs/httpd/nixcraft.com/error_log
CustomLog /var/logs/httpd/nixcraft.com/access_log common
</VirtualHost>

Save and close the file. Restart Apache:
# /etc/init.d/httpd restart

Make sure both domains theos.in and nixcraft.com points to (A address) 203.54.2.5. Also make sure you create /var/logs/httpd/domain-name directories and point ftp user directory to appropriate /var/www/domain-name directory.

Virtual Hosts and IP addresses

IPv4 has limited set of IP address. If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations use only name-based virtual hosts so the server doesn’t need to worry about IP addresses using the asterisks in the config file as follows:

NameVirtualHost *:80
 
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "/var/log/dummy-host.example.com-error_log"
    CustomLog "/var/log/dummy-host.example.com-access_log" common
</VirtualHost>
 
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "/var/log/dummy-host2.example.com-error_log"
    CustomLog "/var/log/dummy-host2.example.com-access_log" common
</VirtualHost>

Posted by: SXI ADMIN

The author is the creator of SXI LLC and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.