El servidor web de Apache es uno de los más populares para proveer contenido web en Internet. Cuenta con más de la mitad de todos los sitios web activos en la red y es extremadamente poderoso y flexible.
Apache divide su funcionalidad y componentes en unidades independientes que pueden ser configuradas independientemente. La unidad básica que describe un sitio individial o el dominio llamado virtual host
.
Estas asignaciones permiten al administrador utilizar un servidor para alojar varios dominios o sitios en una simple interface o IP utilizando un mecanismo de coincidencias. Esto es relevante para cualquiera que busque alojamiento para más de un sitio en un solo VPS.
Cada dominio que es configurado apuntará al visitante a una carpeta específica que contiene la información del sitio, nunca indicará que el mismo servidor es responsable de otros sitios. Este esquema es expandible sin limites de software tanto como el servidor pueda soportar la carga.
En esta guía, te diremos como puedes configurar tus virtual hosts de Apache en tu VPS con Ubuntu 14.04. Durante este proceso, tu aprenderás como configurar diferente contenido para diferentes visitantes dependiendo del dominio que soliciten.
Antes de empezar este tutorial, deberías crear un usuario no-root siguiendo los pasos del 1 al 4 en esa guía.
Además necesitas tener instalado Apache para poder continuar los siguientes pasos. Si no lo has hecho aún, puedes instalar Apache en tu servidor mediante apt-get
:
sudo apt-get update
sudo apt-get install apache2
Después de completar estos pasos, podemos espezar.
Para propósitos de ésta guía, mi configuración creará un virtual host para ejemplo.com
y otro para pruebas.com
. Se hará referencia a ellos en esta guía, pero tu deberías sustituirlos por tus propios dominios durante el proceso.
Para aprender como configurar tus dominios con DigitalOcean, sigue ese enlace. Si no tienes dominios disponibles para utilizar, puedes usar valores cualquiera.
Te mostraremos como editar tus archivos locales posteriormente, en la prueba de configuración si estás utilizando valores cualquiera. Esto te permitirá probar tu configuración desde casa, aún si tu contenido no está disponible a través del dominio para otros visitantes.
El primer paso que necesitamos es crear la estructura de directorios que mantendrán la información de nuestro sitio.
Nuestro documento raíz
(el directorio principal en el cual Apache busca el contenido para mostrar) será configurado en directorios individuales dentro de la ruta /var/www
. Crearemos los directorios aquí para los dos virtual hosts que pretendemos configurar.
Dentro de cada uno de estos directorios crearemos un directorio denominado public_html
el cual mantendrá la información pública del sitio y sus respectivos archivos. Esto nos dará más flexibilidad en nuestro alojamiento.
Para asegurarnos, para cada uno de nuestros sitios, vamos a crear los directorios así: For instance, for our sites, we’re going to make our directories like this:
sudo mkdir -p /var/www/ejemplo.com/public_html
sudo mkdir -p /var/www/pruebas.com/public_html
Las marcas en rojo representan el dominio que esperamos que sirva nuestro VPS.
Ahora tenemos la estructura de los directorios para neustros archivos, pero el usuario root es el propietario de ellos. Si queremos que nuestro usuario regular pueda modificar los archivos en nuestro directorio web, necesitamos cambiar el propietario haciendo lo siguiente:
sudo chown -R $USER:$USER /var/www/ejemplo.com/public_html
sudo chown -R $USER:$USER /var/www/pruebas.com/public_html
La variable $USER
tomará el valor del usuario con el cual actualmente estás identificado. Al hacer esto, nuestro usuario regular ahora es propietario de los directorios public_html
donde se almacenará nuestro contenido.
Debemos además modificar los permisos un poco para asegurarnos que el permiso de lectura pueda ser aplicado a archivos y directorios para que las páginas puedan ser desplegadas correctamente:
sudo chmod -R 755 /var/www
Tu servidor ahora tiene los permisos necesarios para mostrar el contenido, y el usuario deberá ser capaz de crear contenido en los directorios a medida que sea necesario.
Actualmente tenemos la estructura en su lugar. Vamos a crear contenido para mostrar.
Solo vamos a hacer una demostración, así que nuestras páginas serán muy simples. Solo crearemos un archivo index.html
para cada sitio.
Empecemos con ejemplo.com
. Podemos abrir un archivo index.html
mediante un editor escribiendo:
nano /var/www/ejemplo.com/public_html/index.html
En este archivo, crea un documento HTML simple que indicara que el sitio está conectado. Mi archivo quedó así:
<html>
<head>
<title>Bienvenido a Ejemplo.com!</title>
</head>
<body>
<h1>Éxito! El Virtual Host ejemplo.com esta funcionando!</h1>
</body>
</html>
Guarda y cierra el archivo cuando termines.
Podemos copiar este archivo y usarlo de base para nuestro segundo sitio escribiendo:
cp /var/www/ejemplo.com/public_html/index.html /var/www/pruebas.com/public_html/index.html
Ahora podemos abrir el archivo y modificar la información relevante:
nano /var/www/pruebas.com/public_html/index.html
<html>
<head>
<title>Bienvenido a Pruebas.com!</title>
</head>
<body>
<h1>Éxito! El Virtual Host pruebas.com esta funcionando!</h1>
</body>
</html>
Guarda y cierra como el en caso anterior. Ahora tienes páginas suficientes para probar tu configuración.
Los archivos Virtual Host son archivos que contienen información y configuración específica para el dominio y que le indican al servidor Apache como responden a las peticiones de varios dominios.
Apache incluye un archivo Virtual Host por defecto denominado 000-default.conf
que podemos usar para saltarnos al punto. Realizaremos una copia para trabajar sobre ella y crear nuestro Virtual Host para cada dominio.
Iniciaremos con un dominio, configuralo, copialo para el segundo dominio, y después realiza los ajustes necesarios. La configuración por defecto de Ubuntu requiere que cada archivo de configuración de Virtual Host termine en .conf
.
Empezando por copiar el archivo para el primer dominio:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ejemplo.com.conf
Abre el nuevo archivo con tu editor como usuario root:
sudo nano /etc/apache2/sites-available/ejemplo.com.conf
Este archivo se verá algo como esto (he removido los comentarios aquí para hacer el archivo más legible):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Como puedes ver, no hay mucho aquí. Personalizaremos los datos aquí para nuestro primer dominio y agregaremos algunas directivas adicionales. Esta sección del Virtual Host coincide cualquier peticion que es solicitada al puerto 80, el puerto por defecto de HTTP.
Primero, necesitamos cambiar la directiva ServerAdmin
por un correo del administrador del sitio que pueda recibir correos.
ServerAdmin admin@ejemplo.com
Después de esto, necesitamos agregar dos directivas. La primera llamada ServerName
, que establece la base del dominio que debe coincidir para este Virtual Host. Esto será como tu dominio. La segunda, llamada ServerAlias
, determina nombres futuros que pueden coincidir y servirse como el nombre base o dominio principal. Esto es útil para host tipo www
:
ServerName ejemplo.com
ServerAlias www.ejemplo.com
Lo que resta por cambiar para la configuración básica de un Virtual Host es la ubicación del directorio raíz para el dominio. Ya hemos creado lo que necesitamos, así que solo necesitamos modificar DocumentRoot
para apuntarlo al directorio que hemos creado:
DocumentRoot /var/www/ejemplo.com/public_html
En total, nuestro archivo de Virtual Host debe verse así:
<VirtualHost *:80>
ServerAdmin admin@ejemplo.com
ServerName ejemplo.com
ServerAlias www.ejemplo.com
DocumentRoot /var/www/ejemplo.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Guarda y cierra el archivo.
Ahora que tenemos nuestro primer archivo Virtual Host configurado, podemos crear el segundo copiando el primero y realizando los cambios necesarios.
Empecemos por copiarlo:
sudo cp /etc/apache2/sites-available/ejemplo.com.conf /etc/apache2/sites-available/pruebas.com.conf
Abre el nuevo archivo con privilegios root en tu editor:
sudo nano /etc/apache2/sites-available/pruebas.com.conf
Ahora tenemos que modificar todas las piezas de información para referirnos al segundo dominio. Cuando hayas terminado, deberá verse algo así:
<VirtualHost *:80>
ServerAdmin admin@pruebas.com
ServerName pruebas.com
ServerAlias www.pruebas.com
DocumentRoot /var/www/pruebas.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Guarda y cierra al concluir.
Ahora que hemos creado nuestros archivos virtual hosts, debemos habilitarlos. Apache incluye herramientas que nos permiten hacer esto.
Podemos usar la herramienta a2ensite
para habilitar cada uno de nuestros sitios haciendo esto:
sudo a2ensite ejemplo.com.conf
sudo a2ensite pruebas.com.conf
Cuando hayas concluido, deberás reiniciar Apache para asegurarte de que tus cambios surtan efecto:
sudo service apache2 restart
Deberás recibir un mensaje de información similar a esto:
* Restarting web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Este mensaje no afecta nuestro sitio.
Si aún no estás utilizando nombres de dominio de tu propiedad para este procedimiento y utilizaste dominios ejemplo en su lugar, puedes al menos hacer pruebas de funcionalidad de este proceso modificando temporalmente el archivo hosts
de tu computadora local.
Esto interceptará cualquier petición a los dominios que configures y apunten a tu VPS, solo si estas utilizando dominios registrados.
Esto solo funciona a través de tu computadora, y es simplemente útil para propósitos de prueba.
Asegúrate de estár trabajando en tu computadora local para los siguientes pasos y no en tu VPS. Deberás conocer la contraseña del administrador o ser miembro del grupo administrativo.
Si estas en una Mac o una computadora con Linux, edita tu archivo local con privilegios de administrador escribiendo:
sudo nano /etc/hosts
Si estás en una máquina con Windows, puedes buscar las instrucciones para modificar tu archivo hosts aquí.
Los detalles que necesitas agregar son la IP pública de tu VPS seguido del dominio que deseas apuntar a ese VPS.
Para los dominios que utilizamos en esta guía, asumiremos que la IP de nuestro VPS es 111.111.111.111
, podemos agregar las siguientes líneas al final del archivo hosts:
127.0.0.1 localhost
127.0.1.1 guest-desktop
111.111.111.111 ejemplo.com
111.111.111.111 pruebas.com
Esto apuntará directamente cualquier petición para ejemplo.com
y pruebas.com
en nuestra computadora y enviarlas a nuestro servidor en 111.111.111.111
. Esto es lo que queremos si no somos propietarios de esos dominios aún, solo con fines de prueba para nuestros Virtual Hosts.
Guarda y cierra el archivo.
Ahora que tenemos nuestros Virtual Hosts configurados, podemos realizar pruebas de configuración simplemente visitando el dominio que hemos configurado mediante nuestro navegador web:
http://ejemplo.com
Deberás ver algo como esto:
Del mismo modo, si visitamos la segunda página:
http://pruebas.com
Podrás observar el archivo que has creado para el segundo sitio:
Si en ambos sitios funciona bien, entonces has configurado correctamente dos Virtual Hosts en el mismo servidor.
Si necesitas ajustar el archivo hosts de tu computadora, probablemente solo deberás borrar las líneas que has agregado y verificar que tu configuración funciona. Esto previene que tu archivo hosts se llene de entradas que no son necesarias.
Si necesitas acceso constante a estos Virtual Host, considera adquirir dominios para cada sitio y configurarlos para que apunten a tu VPS.
Si me has seguido, deberás tener un servidor respondiendo a dos dominios separados. Ahora puedes expandir este procedimiento siguiendo los pasos que hemos llenado arriba para crear Virtual Hosts adicionales.
No hay limite de software en el número de dominios que Apache pueda manejar, así que eres libre de agregar tantos como tu servidor pueda soportar.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Hola en el paso 5. me sale un erro en el terminal de Linuxmint.
usuariodemimaquina # sudo a2ensite mipagina.com.conf Site mipagina.com already enabled usuariodemimaquina # sudo service apache2 restart Job for apache2.service failed because the control process exited with error code. See “systemctl status apache2.service” and “journalctl -xe” for details
A que se debe?? gracias
Excelente aporte
Buen día, Quisiera alguien me despeje esta inquietud, yo tengo un Droplet con MEAN y en el mismo VPS quiero poner esto de virtual hosts para alojar otras páginas. Yo tengo mi dominio configurado de forma normal en digital ocean, no sé si por default es con apache o con qué. El caso es que si yo hago todas estas configuraciones ¿hay forma de que se me dañe el que ya tengo configurado?. Me explico un poco más, la ruta que yo manejo así como por default (yo no configuré nada de apache inicialmente) es esta /opt/mean/public ahí pongo mi proyecto y configuro el dominio dns y demás ahí en “add domain”. Entonces repito, ¿qué pasa si yo instalo este apache2 y configuro todo eso para otros hosts, sigo teniendo ese por defecto y los otros dos?
Gracias!
Hola,
¿Cómo puedo eliminar un dominio que tengo configurado y ya no uso?
Hola buenas noches
Excelente tutorial, me ha hecho comprender una clase que no lo habia podido hacer. Mi duda es la siguiente: Mi UbuntuServer esta en una maquina virtual. He hecho todos los pasos para crear mis sitios web, pero al ponerlos en el navegador; no funcionan.
Tendra que ver que mi UbuntuServer esta en una MaquinaVirtual?
Quedo a sus ordenes.
Hola! Quizá llegue un poco tarde pero me están sirviendo de mucha ayuda estas guías.
Quería poder acceder a través de Internet a mi servidor, pero me devuleve un Forbidden 403 (“do no have permissions to access /”)
He realizado todos los pasos menos el 6 (opcional) y he configurado el DNS en la web donde tengo los dominios registrados.
SO: Raspbian Jessie Lite v4.4 (2017-04-10)
¿Algún consejo? Gracias!
Es posible integrar dos virtual hosts dentro de un mismo dominio???
sigo tus pasos y se queda pegado cargando y nunca entra a la pagina de prueba,
Hola, muchas gracias por esta gran explicación. Seguí todo al pie de la letra, sin embargo, ambos dominios me llevan al mismo contenido html. ¿Qué podría haber pasado? Por favor, alguien que pueda ayudarme. Muchas gracias. =)
Compañeros una pregunta, yo tengo 2 servidores en mi LAN, ambos son WEB, uno de ellos ya esta publicado hacia internet, en el otro server tengo varias paginas montadas y los virtual host completamente configurados ya que hice las pruebas locales, como le digo a mi firewall que el trafico que entra por el puerto 80 me lo redirija a una pagina en un server o a la otra en cuestion.
Agradezco su ayuda, mi skype es johanluna1994