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 Set it as follows in httpd.conf file:
# vi /etc/httpd/conf/httpd.conf
Set NameVirtualHost as follows:
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 webmaster@theos.in
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

Code for nixcraft.com domain:
<VirtualHost nixcraft.com/>
ServerAdmin webmaster@nixcraft.com
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

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) 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 webmaster@dummy-host.example.com
    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 *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    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

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 10 comments so far... add one

CategoryList of Unix and Linux commands
Disk space analyzersdf duf ncdu pydf
File Managementcat cp mkdir tree
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Modern utilitiesbat exa
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg glances gtop jobs killall kill pidof pstree pwdx time vtop
Searchingag grep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
10 comments… add one
  • Vimuth Mar 11, 2010 @ 13:49

    A very useful guide. Im in a differnt situation though where I want to use my self signed SSL certificate on 2 apaches. I’ve succefully installed it on one server and works as a charm. I want to use te same certificate on another apache server(fail over). Can this be really done? If so please help out. If someone can point me to a good tutorial It’ll be highly appreciated. I need to test this out at this stage is all. Many thanks in advance.

  • Ben Johnson Mar 26, 2010 @ 20:40

    Perfect guide thanks.
    I have added the following to mine to include any sub directory, you then over ride this if you actually need to sub directory.
    ServerName example.co.uk
    ServerAlias http://www.example.co.uk *.example.co.uk

  • paul ajayi Aug 30, 2011 @ 22:08

    please i have problem with my university of London account shows ”500 internal server error”

  • paul ajayi Aug 30, 2011 @ 22:56

    please i have problem with my university of London account shows ”500 internal server error”

  • Zabidin Jun 26, 2012 @ 0:27

    This tutorial doesn’t work.

  • Bharath Sep 27, 2012 @ 11:29

    i have a query
    If and only if we have our own Domain (Registered) only we can able to configure Name Virtual Host
    ?? or we dont need of Registered domain name to host
    Thanks in advance


  • Prasobh Feb 7, 2013 @ 10:53

    Job for httpd.service failed. See ‘systemctl status httpd.service’ and ‘journalctl -n’ for details.
    [root@localhost atps]# systemctl status httpd.service
    httpd.service – The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
    Active: failed (Result: exit-code) since Thu, 2013-02-07 16:21:22 IST; 11s ago
    Process: 9548 ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop (code=exited, status=1/FAILURE)
    Process: 9546 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
    Status: “Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec”
    CGroup: name=systemd:/system/httpd.service

    Feb 07 16:21:22 localhost.localdomain httpd[9546]: httpd: Syntax error on line 61 of /etc/httpd/conf/httpd.conf: Canno…ctory
    Feb 07 16:21:22 localhost.localdomain systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
    Feb 07 16:21:22 localhost.localdomain httpd[9548]: httpd: Syntax error on line 61 of /etc/httpd/conf/httpd.conf: Canno…ctory
    Feb 07 16:21:22 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.
    Feb 07 16:21:22 localhost.localdomain systemd[1]: Unit httpd.service entered failed state

  • Prasobh Feb 7, 2013 @ 10:54

    I’m using fedora 18 with latest httpd.
    i couln’t set up the virtual host yet. please help me

  • Franko Feb 16, 2013 @ 17:48

    In several tutorials one scenario is not clearly explained.
    If we need to point virtual host to /home/user/public_html directory there are few more things:
    1. In httpd.conf put comment on
    # UserDir disabled

    # remove comment:
    UserDir public_html

    #point your virtual host:

    ServerName some-dummy.host.com
    DocumentRoot /home/user/public_html
    ErrorLog logs-some-dummy.host.com
    CustomLog logs-some-dummy.host.com

    2. From a shell:
    # chmod 711 /home/user/
    # chmod 755 /home/user/public_html/

    3. Restart apache:
    # service httpd restart

    It works for me.

  • Brett Apr 18, 2014 @ 0:00

    What about when you’re looking to use a VirtualHost to be a catchall to allow all domains that don’t exist in any other VirtualHost. Can you use ? Will it accept http://www.example.com and example.com too?

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum