Set Up IP-Based Virtual Hosts In Apache

If your server has multiple IPs  and you want to host different website for each IP you can use Apache’s IP-based virtual hosts feature.

Setting up IP-based virtual hosts is easy. First, open up httpd.conf found in the conf directory of your Apache installation directory.

You need to register the IPs that you want Apache to listen on. After the line that says “Listen 80” add:

Listen 10.0.0.1:80
Listen 10.0.0.2:80

If you wish to host websites on ports other than port 80, let’s say 8080, you also need to register it as a port that Apache listens on.

Listen 8080

You can also listen to specific address and port combinations:

Listen 10.0.0.1:8081
Listen 10.0.0.2:8082

Normally, Apache will respond to requests with the default site as defined in httpd.conf. However, you can define different sites for every address and port combination defined in your listen directive. Just add the following for every combination:

<VirtualHost ip-address:port-number>
   ServerAdmin [email protected]
   DocumentRoot /www/docs/www.example.com
   ServerName www.example.com
   ErrorLog logs/www.example.com-error_log
   CustomLog logs/www.example.com-access_log common
</VirtualHost>

<VirtualHost *:80> means this virtual host will handle HTTP requests for any IP on port 80. This virtual host corresponds to “Listen 80”.

<VirtualHost 10.0.0.1:80> means this virtual host will handle HTTP requests for 10.0.0.1  on port 80. This virtual host corresponds to “Listen 10.0.0.1:80”.

<VirtualHost 10.0.0.2:80> means this virtual host will handle HTTP requests for 10.0.0.2  on port 80. This virtual host corresponds to “Listen 10.0.0.2:80”.

<VirtualHost 10.0.0.1:8081> means that this virtual host will handle HTTP requests for the IP address 10.0.0.1 on port 8081. This virtual host corresponds to “Listen 10.0.0.1:8081”.

<VirtualHost 10.0.0.2:8082> means that this virtual host will handle HTTP requests for the IP address 10.0.0.2 on port 8082. This virtual host corresponds to  “Listen 10.0.0.2:8082”.

Save and restart Apache.

That’s it!