Configurar Virtual Hosts en Apache2

En el pasado artículo, aprendimos a instalar y configurar Apache2 en Linux. En el presente post, partiremos de la base de esta instalación y aprenderemos a crear y a configurar dos Virtual Hosts (o Hosts Virtuales).

De forma habitual, se instalan servidores Web para diferentes proyectos y se almacenan sus archivos en /var/www. Para acceder a ellos, solo tenemos que acceder http://localhost desde el propio servidor a con su IP o nombre desde un cliente.  Si trabajamos con diferentes proyectos, la forma habitual de hacerlo es creando diferentes directorios dentro de www y acceder:

http://servidor%5B:puerto%5D/directorio1
http://servidor%5B:puerto%5D/directorio2

De esta forma es fácil trabajar pero quizá seria mejor trabajar directamente por nombres de proyectos independientes para cada uno de la forma:

http://www.proyecto1.com
http://www.projecte2.com

Para hacer esto, solo es necesario configurar Virtual Hosts los cuales nos permiten hacer funcionar varios sitios web dentro de un mismo servidor.

Para empezar a configurar los Hosts Virtuales, accedemos al fichero de configuración principal de Apache2 (httpd.conf) y descomentamos la línea que permite incluir el fichero de configuración de los VH.

aitor@httpServer:/usr/local/apache2/conf$ sudo vim httpd.conf

Y descomentamos la siguiente directiva (línea 394)

# Real-time info on requests and configuration
#Include conf/extra/httpd-info.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include conf/extra/httpd-manual.conf

Al descomentar esta linea, estamos incluyendo el archivo httpd-vhosts.conf situado dentro del directorio extra de Apache. Vamos a ver el contenido de este fichero para poder configurar correctamente los VH. En este caso, a modo de ejemplo, crearemos dos VH, el primero llamado host1.com y el segundo host2.com.

aitor@httpServer:/usr/local/apache2/conf$ sudo vim extra/httpd-vhosts.conf

Creamos los dos VH aprovechando los que ya hay creados de ejemplo.

<VirtualHost *:80>
 ServerAdmin arigada@mailServ.com
 DocumentRoot "/var/www/host1.com"
 ServerName host1.com
 ServerAlias www.host1.com
 ErrorLog "logs/host1.com-error_log"
 CustomLog "logs/host1.com-access_log" common
 </VirtualHost>

<VirtualHost *:80>
 ServerAdmin arigada@mailServ.com
 DocumentRoot "/var/www/host2.com"
 ServerName host2.com
 ServerAlias www.host2.com
 ErrorLog "logs/host2.com-error_log"
 CustomLog "logs/host2.com-access_log" common
 </VirtualHost>

 

Donde:

  • ServerAdmin: Especifica la dirección de correo del administrador del servidor Apache.
  • DocumentRoot: Especifica donde se almacenan las paginas web del servidor.
  • ServerName: Nombre del servidor, este nombre será el que introducirán los clientes en el explorador.
  • ServerAlias: Un alias, o sobrenombre, para el servidor. Este campo es opcional.
  • ErrorLog: Donde se van a almacenar los logs de error para este VH.
  • CustomLog: Donde se almacenaran los logs de acceso para este VH.

Nota: Debemos asegurarnos que antes de añadir ambos virtual hosts tenemos descomentada la directiva NameVirtualHost *:80, de lo contrario apache nos mostrará la siguiente advertencia:

[warn] _default_ VirtualHost overlap on port 80, the first has precedence

Una vez creados los VH, reiniciamos apache y nos aparecerán dos mensajes de advertencia.

aitor@httpServer:/usr/local/apache2/conf$ sudo /usr/local/apache2/bin/apachectl start
 Warning: DocumentRoot [/var/www/host1.com] does not exist
 Warning: DocumentRoot [/var/www/host2.com] does not exist

Estos warnings nos informan de que no existen los directorios de los VH creados. A continuación vamos a crearlos.

aitor@httpServer:/usr/local/apache2/conf$ sudo mkdir /var/www
aitor@httpServer:/usr/local/apache2/conf$ sudo mkdir /var/www/host1.com
aitor@httpServer:/usr/local/apache2/conf$ sudo mkdir /var/www/host2.com

Finalmente, accedemos a httpd.conf y modificamos la directiva DocumentRoot para que el directorio donde se almacenan los archivos html sea /var/www. Esta directiva la podemos encontrar en la linea 104.

#
 # DocumentRoot: The directory out of which you will serve your
 # documents. By default, all requests are taken from this directory, but
 # symbolic links and aliases may be used to point to other locations.
 #
 DocumentRoot "/var/www"
...

Y, a continuación, modificamos la directiva Directory en la linea 131

#
 # This should be changed to whatever you set DocumentRoot to.
 #
<Directory "/var/www">
 #
 # Possible values for the Options directive are "None", "All",
 # or any combination of:

Ahora al reiniciar Apache no encontramos ningún waring.

aitor@httpServer:/usr/local/apache2/conf$ sudo /usr/local/apache2/bin/apachectl start
aitor@httpServer:/usr/local/apache2/conf$

Una vez tenemos Apache correctamente configurado para funcionar con estos dos Hosts Virtuales, debemos configurar el DNS de nuestra red para que, al acceder a host1.com y host2.com, las peticiones se dirijan a nuestro servidor web. De momento, para hacer pruebas, podemos modificar el fichero /etc/hosts de nuestro servidor (o del cliente si queremos acceder desde otra máquina Linux) para comprobar el correcto funcionamiento de Apache. Este fichero será usado como DNS local en el equipo y consta de dos columnas, dirección IP del servidor y nombre bajo el cual queremos acceder a él.

El fichero /etc/hosts quedaria de la siguiente manera:

127.0.0.1       localhost
127.0.1.1       httpServer
127.0.0.1       host1.com
127.0.0.1       www.host1.com
127.0.0.1       host2.com
127.0.0.1       www.host2.com

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Finalmente, creamos los archivos html que deseemos en cada vhost, en este caso un simple index.html con el contenido “hola host1!” y “hola host2!” para host1.com y host2.com respectivamente. Este texto, será el mostrado por pantalla al acceder a ellos desde un cliente.

aitor@httpServer:/usr/local/apache2/conf$ sudo vim /var/www/host1.com/index.html
aitor@httpServer:/usr/local/apache2/conf$ sudo vim /var/www/host2.com/index.html

Ahora, si accedemos desde un cliente, podemos comprobar como los VH funcionan correctamente.

Posts relacionados:

Instalación y configuración de Apache2 en Linux

Permisos de acceso con Apache2 y .htaccess

Configurar HTTPS para Apache2 en Linux

Anuncios

3 Responses to Configurar Virtual Hosts en Apache2

  1. Pingback: Instalación y configuración de Apache2 en Linux « Aitor Rigada

  2. Pingback: Configurar HTTPS para Apache2 en Linux « Aitor Rigada

  3. Pablo says:

    Hola, he seguido tus tutoriales para una instalación de apache en una maquina virtual, y ha funcionado como la seda, la explicación es excelente, comprensible y muy ilustrativa, solo quería agradecerte el trabajo que realizas en este blog, que ya esta en mis favoritos.

    Muchas gracias.

    Pablo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: