VirtualHost Apache basado en IP

Un Host Virtual o VirtualHost , se utiliza para crear varios sitios web en una máquina con el servidor Web Apache.

 

La directiva VirtualHost nos permite definir los Host Virtuales por IP o por Nombre.

De esta forma tendrán funcionamientos diferentes.
 

Hoy veremos los VirtualHosts basados en IP.

 

Los VirtualHosts basados en IP (IP-based Virtual Host), tienen sentido cuando en la misma máquina alojamos varios sitios web en IP´s diferentes (especialmente útil en estos casos la creación de sub-interfaces o interfaces virtuales).

 

–> Cuando creamos un host virtual basado en ip, tendremos un sitio web alojado en una IP (o varios sitios web alojados en varias IP´s)

–> Cuando creamos un host virtual basado en nombre es porque deseamos crear varios sitios sobre la misma IP, pero sobre diferente puerto y diferente nombre.


 
Esta es la ventaja de los Virtual Host, el poder disponer de varios Hosts basados en Nombre en una misma máquina, y de esta forma poder darle mayor rendimiento a una IP.

 

 

Veamos cómo crear un Virtual Host basado en IP

 
– Vamos a crear un Host Virtual que responda por el dominio www1.midominio.com, cuya raíz del sitio se encuentre en /var/www/sitio1 , y que funcione sobre la ip 192.168.1.10 /24 , sobre el puerto 80:
 
Primero configuraremos las interfaces de red, en el archivo interfaces:

1
gedit /etc/network/interfaces

 

 

CREAR UNA SUB-INTERFAZ VIRTUAL

Configuramos el archivo interfaces de esta forma (configuramos una interfaz ethernet, y además creamos una sub-interfaz virtual):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Archivo: /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# La interfaz de Loopback
auto lo
iface lo inet loopback
 
# La interfaz de Red primaria
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
 
#Otra Subinterfaz secundaria
auto eth0:1
iface eth0:1 inet static
address 192.168.1.30
netmask 255.255.255.0
gateway 192.168.1.1

 

La sub-interfaz virtual no necesita ni siquiera que activemos una interfaz nueva en VirtualBox. Así que podemos activarla editando el archivo nombrado (que será lo mejor porque así seguro que nos mantiene la configuración en el próximo reinicio) o ejecutando este comando:

1
root@Ubuntu-server:/etc/bind# ifconfig eth0:1 192.168.1.30 netmask 255.255.255.0

 

En la siguiente captura muestro las interfaces configuradas. Se aprecia también la interfaz eth1 con dirección 192.168.56.253, que se trata simplemente de la interfaz Host-Only de VirtualBox que utilizamos para acceder por ssh a nuestra Maquina Virtual Linux.

Configurar interfaces linux

 

 
—> A continuación , con las interfaces de red correctamente configuradas,  tendremos que crear el dominio DNS con Bind (en Linux). No olvideis repasar la entrada del blog.
 

 

Instalación de Apache Web Server

 
Seguimos instalando Apache Server, lo haremos con el comando:

1
$sudo apt-get install apache2

 
Si deseamos instalar Apache con mysql y otros paquetes, podemos utilizar el comando:

1
apt install libapache2-mod-php5 php5-mysql mysql-server php5-gd

 

Posteriormente nos desplazamos al directorio de trabajo:

1
cd /etc/apache2/

 
vamos a “/etc/apache2/sites-available” y buscamos el sitio default , que utilizaremos como base para el nuestro.
Entramos al archivo default con nuestro editor preferido (nano, gedit, vim …)

1
nano default

 
Aparecerá algo como esto:

Sitio apache

 

 

En este punto recordaremos que el ejercicio consistía en Crear un Host Virtual que responda por el dominio www1.midominio.com, cuya raíz del sitio se encuentre en “/var/www/sitio1” , y que funcione sobre la ip 192.168.1.10 /24 , sobre el puerto 80

 
Así que empezaremos por  modificar el archivo  “/etc/apache2/sites-available/default”  (donde encontramos un sitio default disponible )   para que quede algo así como:

1
2
3
4
5
<VirtualHost 192.168.1.10 :80>
ServerAdmin webmaster@midominio.com
ServerName www1.midominio.com
DocumentRoot /var/www/sitio1/
</VirtualHost>

Con esto creamos un Virtualhost en la ip 192.168.1.10, que responderá a las peticiones del sitio web, sobre el puerto 80.

 

 

En este caso no es necesaria la directiva “NameVirtualHost” , ya que solo tenemos un sitio habilitado.

Name VirtualHost será de utilidad cuando tengamos que habilitar varios sitios sobre la misma ip.
 

Seguimos, nos habíamos quedado en :

La raíz del sitio será “/var/www/sitio1”

en el cual encontramos el siguiente index.html:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<h2>FUNCIONA !!</h2>
 
BIENVENIDOS AL SERVER
 
<center>WWW1.MIDOMINIO.COM.COM</center>
 
 
<ul>
 
<li>- ESTE ES EL VIRTUALHOST ALOJADO EN VAR/WWW/SITIO1</li>
 
</ul>
 
QUE RESPONDE CON LA IP 192.168.1.10
, POR EL PUERTO 80

 

Después lo guardamos por ejemplo con el nombre del sitio , en este caso www1.midominio.com
Posteriormente, situados en el directorio/etc/apache2/sites-available”, activaremos el sitio web con a2ensite “nombre del sitio” (con lo cual se moverá al directorio sites-enabled o sitios habilitados)
 
También modificaremos el archivo “/etc/apache2/ports.conf ” para que escuche a los VirtualHosts adecuados y en los puertos deseados:
 

1
root@Ubuntu-server:/etc/apache2# gedit ports.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
# If you just change the port or add more ports here, you will likely also
 
# have to change the VirtualHost statement in
 
# /etc/apache2/sites-enabled/000-default
 
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
 
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
 
# README.Debian.gz
 
Listen 192.168.1.10:80

 

 

Habilitamos el nuevo sitio web, recargamos la config de Apache y reiniciamos Apache

 
Habilitamos el sitio web Apache con los 2 VirtualHosts:

1
a2ensite default.conf

 

Recargamos la configuración de Apache Server:

1
2
3
/etc/init.d/apache2 reload
o
service apache2 reload

 

Reiniciamos Apache Server:

1
2
3
/etc/init.d/apache2 restart
o
service apache2 restart

 

 

Pruebas desde el equipo cliente

 
Y nos vamos al pc cliente (en este caso maquina virtual cliente) para hacer las comprobaciones por medio del navegador.
 
El cliente ha de estar configurado en el mismo rango de la red, por ejemplo podemos ponerle la ip 192.168.1.100 /24 , y hemos de configurar la dirección del servidor DNS que utilizará para resolver las consultas.
 

Por tanto, editamos el “/etc/resolv.conf” del equipo cliente y añadimos su resolvedor DNS (que ha de ser el equipo sobre el que hemos montado el DNS, en este caso el 192.168.1.10):
nameserver 192.168.1.10″
 
Siendo 192.168.1.10 el Servidor que estamos configurando como Server DNS y HTTP, hacemos una petición http desde el navegador del cliente:
 

Sitio web apache

 

 

Crear otro Virtual Host, en la misma máquina, sobre otro domino y otro puerto

 
SI quisiéramos crear otro Virtual Host, en este caso podríamos crear otro Host Virtual:
 
– en la sub-interfaz 192.168.1.30
– sobre el puerto 8080
– con ServerName www2.midominio.com
– en DocumentRoot /var/www/sitio2/
 
–> Primero crearíamos el nuevo dominio DNS al igual que el primer dominio: Cómo crear un dominio DBS con Bind.
 
–> Después creamos un index.html en el DocumentRoot de este sitio, y modificaremos el archivo ports.conf para que la máquina también acepte peticiones sobre el puerto 8080 (hemos de añadir en este caso Listen 192.168.1.30:8080)
 
–> Y después, en el archivo del sitio web Apache que tenemos actualmente habilitado (en /sites-enabled), añadiríamos:
 

1
2
3
4
5
&lt;VirtualHost 192.168.1.30 :8080&gt;
ServerAdmin webmaster@midominio.com
ServerName www2.midominio.com
DocumentRoot /var/www/sitio2/
</VirtualHost>

 

 

– Reiniciamos el servicio Bind:

1
2
3
4
rndc reload
o
/etc/init.d/bind9 reload
/etc/init.d/bind9 restart

– Recargamos la config de Apache


– Reiniciamos el servicio de Apache


– Probamos en el pc cliente

 

 

Bueno, ya hemos acabado, hemos configurado correctamente un dominio DNS con Bind, y montado un VirtualHost Apache basado en IP.
 
Más info acerca de los Virtual Hosts basados en IP (IP-based Virtual Host)