Ago 12 2011

Dos paginas web en un mismo servidor – VirtualHost

Apache Server

Apache Server - Logo

En una serie de 4 posts, hemos podido ver Como crear tu propio servidor web.

Ahora imaginemos que lo que necesitamos es tener mas de una web (ya sea blog, foro…etc) en un mismo servidor.

Hacerlo es sencillo si nos ayudamos de una herramienta de Apache, VirtualHost.

VirtualHost es una herramienta que ya hemos visto anteriormente pero que no he explicado en profundidad. Por tanto, quiero explicarlo un poco mas extendido para que podáis hacer un buen uso de esta magnifica herramienta.

Bien, pongámonos en contexto:

Yo tengo una web, http://sakrow.com y quiero tener un blog, https://blog.sakrow.com. Pero mi problema llega con dos cosas. La primera es que solamente tengo un único servidor y router. Ello hace que tenga que tener los puertos (80 en este caso) redirigidos a un único servidor y ademas no puedo usar un Proxy Server porque no tengo una posible segunda maquina.

Bien, entonces solamente queda la opción de tener dos paginas web en una única maquina.

¿Como conseguimos eso? ¡VirtualHost!

¿Que es VirtualHost?

VirtualHost es una configuración de Apache que nos permite diferenciar entre dos dominios y enviar la petición a la carpeta correspondiente, de modo que sakrow.com y blog.sakrow.com puedan estar en la misma maquina (pero en diferentes carpetas). Esto es totalmente transparente para el usuario.

¿Como funciona VirtualHost?

La mejor manera de conocer como funciona es con el ejemplo que hemos tomado antes. Suponemos que tenemos sakrow.com y blog.sakrow.com.

Lo primero es crear sus carpetas individuales en nuestro servidor. Por tanto creamos sakrow y blogsakrow en la carpeta /var/www/

cd /var/www
mkdir sakrow
mkdir blogsakrow

De esta manera ya están creadas las dos carpetas. Ahora creemos un index.html para cada carpeta. De modo que mas tarde le digamos al Apache que lea el index.html de cada carpeta.

Una vez creado nos vamos a la carpeta /etc/apache2/sites-available/ en esta carpeta nos encontramos con los sitio posibles en nuestro servidor. Estos sitios son de lo que estamos hablando, las posibles web que puede servir Apache.

Por defecto estará 000-default, pero nosotros vamos a crear dos nuevos archivos, sakrow y blogsakrow.

[warning]Cuidado:

Estos archivos no deben tener extensión, por lo que tenéis que tener cuidado al crearlos, nunca les pongáis una extensión.[/warning]

Una vez creados, tenemos que escribir lo siguiente:

En sakrow:

#Web de sakrow
<VirtualHost *:80>
ServerName 192.168.10.100
ServerAlias sakrow.com
DocumentRoot /var/www/sakrow
DirectoryIndex index.html
ServerAdmin contacto@sakrow.com
</VirtualHost>

En sakrowblog:

#Blog de sakrow
<VirtualHost *:80>
ServerName 192.168.10.100
ServerAlias blog.sakrow.com
DocumentRoot /var/www/sakrowblog
DirectoryIndex index.html
ServerAdmin contacto@sakrow.com
</VirtualHost>

De este modo lo que le decimos con cada cosa es:

  • Servername:  IP del servidor que tiene la pagina web, en este caso como no tenemos ningún tipo de DNS, tenemos que poner la IP propia de nuestro ordenador, podéis verla con el comando ifconfig.
  • ServerAlias:  nombre sobre el que se identificara esa web, si ponemos www.sakrow.com como en este caso, y luego le hacemos una petición de sakrow.com, no nos servirá esta web, porque le hemos dicho que responda a la petición de www.sakrow.com, por ello se suele duplicar esta entrada y poner las dos opciones.
  • DocumentRoot: ruta en la que podemos encontrar la carpeta que contiene la informacion de la web. Como recordareis hemos creado dos carpetas sakrow y blogsakrow. Aquí es donde las definiremos.
  • DirectoryIndex: aqui en donde hacemos uso del index.html que hemos creado anteriormente. Es donde le decimos a Apache cual es la primera pagina que tiene que cargar.
  • ServerAdmin: si por alguna cosa da un error Apache y no muestra la pagina,  dentro del error aparecerá el correo electrónico que pongáis aquí, de modo que puedan contactar con vosotros.

[warning]Evidentemente si nos equivocamos de carpeta en DocumentRoot, no encontrara el index.php o sera el de otra carpeta.[/warning]

Una vez guardados los cambios, tenemos que activar los dos sitios, ya que le tenemos que decir de alguna manera a Apache, que existen dos sitios diferentes, primero activarlos y luego reiniciando Apache.

Para activar un sitio se usa en comando a2ensite misitio donde misitio es el nombre del archivo que hemos creado, por tanto:

a2ensite sakrow
a2ensite sakrowblog

Ahora ya tenemos activados las dos webs y reiniciamos Apache:

/etc/init.d/apache2 restart

Y con esto ya podemos acceder a nuestras dos paginas web. Eel proceso se puede repetir con tantas paginas como vosotros queráis, de manera que se pueden almacenar todas las webs que se quieran en un solo servidor.

[important]Si queremos acceder desde la red LAN a esas dos paginas, tenemos que modificar el archivos hosts de nuestro terminal

En este caso:
sakrow.com 192.168.10.100
blog.sakrow.com 192.168.10.100[/important]

9 comentarios

2 pings

Ir al formulario de comentarios

    • Carlos on 12/08/2011 at 2:40 PM

    Hola,

    El tutorial está genial, muy bien explicado!
    Pero en el código de blogsakrow hay un par de errores: donde pone ServerAlias sakrow.com, debería poner ServerAlias blog.sakrow.com, y donde pone DocumentRoot /var/www/sakrow, debería poner DocumentRoot /var/www/blogsakrow.
    Supongo que cosas del copy-paste jeje

    Saludos!

    • Sakrow on 12/08/2011 at 8:23 PM
      Author

    Maldito Copy-Paste.

    Ya esta solucionado, ademas también estaba como index.php y es index.html

    También por no volver a leerlo detenidamente 🙂

    ¡Gracias!

    • v3rk3r on 02/09/2011 at 7:29 PM

    Saludos, por favor quería hacerle una pregunta. Ya tengo mi sitio creado el cual es ipv6venezuela.com, con apache2 y bind9 en Debian 6.0, con un plantilla wordpress. Como debe ser la configuración del virtualhost en este caso, suponiendo que la nueva web es ipv6venezuela.net? Gracias. La duda es porque los tutoriales parten de cero y en mi caso ya la web esta instalada.

    • Sakrow on 05/09/2011 at 6:14 PM
      Author

    ¿En tu caso van a tener diferente contenido una pagina y la otra?

    Porque si es el mismo, directamente donde compras el dominio le dices que redirija el trafico y ya esta.

    Si no con cambiar

    ServerAlias
    DocumentRoot

    Para el dominio (ServerAlias) y para la carpeta contenedora de wordpress (DocumentRoot) te vale…

    Dime exactamente lo que quieres hacer.

    Un saludo!

    • jorge on 30/04/2016 at 9:45 PM

    Tengo una duda. Este texto donde va?

    a2ensite sakrow
    a2ensite sakrowblog

    en 000-default?

    Muchas gracias.

    • Lenin Tenecela on 12/05/2016 at 6:04 PM

    Saludos Sakrow:
    Una pregunta, estoy tratando de crear una web sobre Apache para la web primaria de mi trabajo y otra web para trabajar con gitLab para repositorios de documentos de investigacion y codificacion, esta ultima me solicitan que la hagamos sobre nginx.
    Problema: Tenemos un solo servidor fisico disponible. ¿Cómo puedo hacerlo?, ¿Se podría? Dame una guía o una luz hacia donde ir o que leer.
    ¿Puedo direccionar a traves de virtual host de apache a la web almacenada en nginx?
    Cordialmente
    Lenin Tenecela

    • Lenin Tenecela on 12/05/2016 at 6:05 PM

    Saludos Sakrow:
    Una pregunta, estoy tratando de crear una web sobre Apache para la web primaria de mi trabajo y otra web para trabajar con gitLab para repositorios de documentos de investigacion y codificacion, esta ultima me solicitan que la hagamos sobre nginx.
    Problema: Tenemos un solo servidor fisico disponible. ¿Cómo puedo hacerlo?, ¿Se podría? Dame una guía o una luz hacia donde ir o que leer.
    ¿Puedo direccionar a traves de virtual host de apache a la web almacenada en nginx?
    Cordialmente
    Lenin Tenecela

    • Cesar Gonzalez Rocha on 24/02/2017 at 1:04 AM

    Hola que tal tengo una pregunta sobre la ultima parte
    *********
    [important]Si queremos acceder desde la red LAN a esas dos paginas, tenemos que modificar el archivos hosts de nuestro terminal

    En este caso:
    sakrow.com 192.168.10.100
    blog.sakrow.com 192.168.10.100[/important]
    *************

    Que etiquetas son las que se colocan asi, ya que yo coloque en
    ServerName ejemplo.org 192.168.1.65 y al momento de reiniciar
    me lanza un error el apache

    ——Job for apache2.service failed because the control process exited with error code. See “systemctl status apache2.service” and “journalctl -xe” for details.
    failed!
    ——-

    debido a que tengo mal mi sintaxis

    • Edison on 11/09/2017 at 6:01 PM

    Buenos dias.

    yo tengo un DNS en un centos 7, el nombre es: dns.dominio.local

    cuando configuro el virtualhost lo hago de la siguiente manera:

    ServerName dns.dominio.local
    ServerAdmin admin@dominio.local
    DocumentRoot: /var/www/html/website1

    con esta configuración y teniendo el archivo index.html en el directorio website1
    mi pagina funciona, carga desde un equipo cliente con la IP del servidor y con el FQDN: dns.dominio.local

    debo de crear 3 paginas mas que ingresen con los siguientes nombres : http://www.dominio.local, intra.dominio.local, acceso.dominio.local,
    agradezco me asesoren con el proceso para la creacion puesto que al crear otro directorio con otro index para alguna de las nuevas paginas, mi servidor genera problema y el servicio httpd no permite reiniciar.

  1. […] Actualización 12/08/11: En el blog de Sakrow tienes otro tutorial complementario al que nos ocupa para tener dos páginas web pero con la diferencia de estar alojadas en el mismo servidor. […]

  2. […] Actualización 12/08/11: En el blog de Sakrow tienes otro tutorial complementario al que nos ocupa para tener dos páginas web pero con la diferencia de estar alojadas en el mismo servidor. […]

Deja un comentario

Your email address will not be published.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies