Cómo configurar hosts virtuales Apache en Ubuntu 16.04

Introducción
El servidor web Apache es la forma más popular de ofrecer contenido web en Internet. Representa más de la mitad de todos los sitios web activos en Internet y es extremadamente potente y flexible.
Apache divide su funcionalidad y sus componentes en unidades individuales que se pueden personalizar y configurar de forma independiente. La unidad básica que describe un sitio o dominio individual se denomina virtual host
.
Estas designaciones permiten al administrador utilizar un servidor para alojar varios dominios o sitios desde una única interfaz o IP mediante un mecanismo de coincidencia. Esto es importante para cualquiera que desee alojar más de un sitio desde un único servidor.
Cada dominio que se configure dirigirá al visitante a un directorio específico que contiene la información de ese sitio, sin indicar nunca que el mismo servidor también es responsable de otros sitios. Este esquema es ampliable sin ningún límite de software siempre que su servidor pueda soportar la carga.
En esta guía, le explicaremos cómo configurar hosts virtuales Apache en un servidor Ubuntu 16.04. Durante este proceso, aprenderá a ofrecer distintos contenidos a distintos visitantes según los dominios que soliciten.
Prerrequisitos
Antes de comenzar este tutorial, debe crear un usuario no root habilitado para sudo como se describe en los pasos 1 a 4 aquí.
También necesitará tener instalado Apache para poder seguir estos pasos. Si aún no lo ha hecho, puede instalar Apache en su servidor mediante apt-get
:
- sudo apt-get update
- sudo apt-get install apache2
Una vez completados estos pasos, podemos comenzar.
Para los fines de esta guía, nuestra configuración creará un host virtual para example.com
y otro para test.com
. Se hará referencia a estos en toda la guía, pero debe sustituir sus propios dominios o valores a medida que avanza.
Más adelante le mostraremos cómo editar su archivo de hosts locales para probar la configuración si está usando valores ficticios. Esto le permitirá probar su configuración desde su computadora personal, aunque su contenido no esté disponible a través del nombre de dominio para otros visitantes.
Paso 1: Creación de la estructura del directorio
El primer paso que vamos a dar es crear una estructura de directorio que contendrá los datos del sitio que serviremos a los visitantes.
Nuestro document root
directorio (el directorio de nivel superior que Apache analiza para encontrar contenido para ofrecer) se configurará en directorios individuales dentro del /var/www
directorio. Crearemos un directorio aquí para ambos hosts virtuales que planeamos crear.
Dentro de cada uno de estos directorios, crearemos una public_html
carpeta que contendrá nuestros archivos reales. Esto nos da cierta flexibilidad en nuestro hosting.
Por ejemplo, para nuestros sitios, vamos a crear nuestros directorios de esta manera:
- sudo mkdir -p /var/www/example.com/public_html
- sudo mkdir -p /var/www/test.com/public_html
Las porciones en rojo representan los nombres de dominio que queremos servir desde nuestro VPS.
Paso 2: Concesión de permisos
Ahora tenemos la estructura de directorios para nuestros archivos, pero son propiedad de nuestro usuario root. Si queremos que nuestro usuario normal pueda modificar archivos en nuestros directorios web, podemos cambiar la propiedad haciendo lo siguiente:
- sudo chown -R $USER:$USER /var/www/example.com/public_html
- sudo chown -R $USER:$USER /var/www/test.com/public_html
La $USER
variable tomará el valor del usuario con el que está conectado actualmente cuando presione ENTER
. Al hacer esto, nuestro usuario habitual ahora es propietario de los public_html
subdirectorios donde almacenaremos nuestro contenido.
También deberíamos modificar un poco nuestros permisos para garantizar que se permita el acceso de lectura al directorio web general y a todos los archivos y carpetas que contiene para que las páginas puedan servirse correctamente:
- sudo chmod -R 755 /var/www
Su servidor web ahora debería tener los permisos que necesita para servir contenido y su usuario debería poder crear contenido dentro de las carpetas necesarias.
Paso 3: creación de páginas de demostración para cada host virtual
Ya tenemos lista nuestra estructura de directorios. Vamos a crear contenido para ofrecer.
Solo vamos a hacer una demostración, por lo que nuestras páginas serán muy simples. Simplemente vamos a crear una index.html
página para cada sitio.
Empecemos con example.com
. Podemos abrir un index.html
archivo en nuestro editor escribiendo:
- nano /var/www/example.com/public_html/index.html
En este archivo, crea un documento HTML simple que indique el sitio al que está conectado. El archivo tiene este aspecto:
/var/www/example.com/public_html/index.html
html head titleWelcome to Example.com!/title /head body h1Success! The example.com virtual host is working!/h1 /body/html
Guarde y cierre el archivo cuando haya terminado.
Podemos copiar este archivo para usarlo como base para nuestro segundo sitio escribiendo:
- cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html
Luego podemos abrir el archivo y modificar la información relevante:
- nano /var/www/test.com/public_html/index.html
/var/www/test.com/public_html/index.html
html head titleWelcome to Test.com!/title /head body h1Success! The test.com virtual host is working!/h1 /body/html
Guarde y cierre también este archivo. Ahora tiene las páginas necesarias para probar la configuración del host virtual.
Paso 4: creación de nuevos archivos de host virtual
Los archivos de host virtual son los archivos que especifican la configuración real de nuestros hosts virtuales y dictan cómo el servidor web Apache responderá a varias solicitudes de dominio.
Apache incluye un archivo de host virtual predeterminado llamado 000-default.conf
que podemos usar como punto de partida. Lo copiaremos para crear un archivo de host virtual para cada uno de nuestros dominios.
Comenzaremos con un dominio, lo configuraremos, lo copiaremos para nuestro segundo dominio y luego haremos los ajustes necesarios. La configuración predeterminada de Ubuntu requiere que cada archivo de host virtual termine en .conf
.
Creación del primer archivo de host virtual
Comience copiando el archivo del primer dominio:
- sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Abra el nuevo archivo en su editor con privilegios de root:
- sudo nano /etc/apache2/sites-available/example.com.conf
El archivo se verá así (se han eliminado los comentarios para que el archivo sea más accesible):
/etc/apache2/sitios-disponibles/example.com.conf
VirtualHost *:80 ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined/VirtualHost
Como puede ver, no hay mucho aquí. Personalizaremos los elementos aquí para nuestro primer dominio y agregaremos algunas directivas adicionales. Esta sección de host virtual coincide con cualquier solicitud que se realice en el puerto 80, el puerto HTTP predeterminado.
Primero, necesitamos cambiar la ServerAdmin
directiva a un correo electrónico a través del cual el administrador del sitio pueda recibir correos electrónicos.
ServerAdmin admin@example.com
Después de esto, necesitamos agregar dos directivas. La primera, llamada ServerName
, establece el dominio base que debe coincidir con esta definición de host virtual. Lo más probable es que sea su dominio. La segunda, llamada ServerAlias
, define otros nombres que deben coincidir como si fueran el nombre base. Esto es útil para hacer coincidir los hosts que definió, como www
:
ServerName example.comServerAlias www.example.com
Lo único que tenemos que cambiar para un archivo de host virtual básico es la ubicación de la raíz del documento para este dominio. Ya hemos creado el directorio que necesitamos, así que solo tenemos que modificar la DocumentRoot
directiva para que refleje el directorio que hemos creado:
DocumentRoot /var/www/example.com/public_html
En total, nuestro archivo virtualhost debería verse así:
/etc/apache2/sitios-disponibles/example.com.conf
VirtualHost *:80 ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined/VirtualHost
Guarde y cierre el archivo.
Copiar el primer host virtual y personalizarlo para el segundo dominio
Ahora que tenemos nuestro primer archivo de host virtual establecido, podemos crear el segundo copiando ese archivo y ajustándolo según sea necesario.
Comience copiándolo:
- sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf
Abra el nuevo archivo con privilegios de root en su editor:
- sudo nano /etc/apache2/sites-available/test.com.conf
Ahora debes modificar todos los datos para que hagan referencia a tu segundo dominio. Cuando hayas terminado, puede que se parezca a esto:
/etc/apache2/sites-available/test.com.conf
VirtualHost *:80 ServerAdmin admin@test.com ServerName test.com ServerAlias www.test.com DocumentRoot /var/www/test.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined/VirtualHost
Guarde y cierre el archivo cuando haya terminado.
Paso 5: Habilitación de los nuevos archivos del host virtual
Ahora que hemos creado nuestros archivos de host virtual, debemos habilitarlos. Apache incluye algunas herramientas que nos permiten hacer esto.
Podemos utilizar la a2ensite
herramienta para habilitar cada uno de nuestros sitios de esta manera:
- sudo a2ensite example.com.conf
- sudo a2ensite test.com.conf
A continuación, deshabilite el sitio predeterminado definido en 000-default.conf
:
- sudo a2dissite 000-default.conf
Cuando haya terminado, deberá reiniciar Apache para que estos cambios surtan efecto:
- sudo systemctl restart apache2
Paso 6: Configuración del archivo de hosts locales (opcional)
Si no ha estado utilizando nombres de dominio reales de su propiedad para probar este procedimiento y ha estado utilizando algunos dominios de ejemplo en su lugar, al menos puede probar la funcionalidad de este proceso modificando temporalmente el hosts
archivo en su computadora local.
Esto interceptará todas las solicitudes de los dominios que haya configurado y las dirigirá a su servidor, tal como lo haría el sistema DNS si estuviera utilizando dominios registrados. Sin embargo, esto solo funcionará desde su computadora y es simplemente útil para fines de prueba.
Asegúrese de que está trabajando en su computadora local para realizar estos pasos y no en su servidor. Deberá conocer la contraseña administrativa de la computadora o ser miembro del grupo administrativo.
Si está en una computadora Mac o Linux, edite su archivo local con privilegios administrativos escribiendo:
- sudo nano /etc/hosts
Si está en una máquina Windows, puede encontrar instrucciones sobre cómo modificar su archivo de hosts aquí.
Los detalles que debes agregar son la dirección IP pública de tu servidor VPS seguida del dominio que deseas utilizar para acceder a ese VPS.
Para los dominios que utilicé en esta guía, asumiendo que la dirección IP de mi VPS es 203.0.113.10
, podría agregar las siguientes líneas al final de mi archivo de hosts:
/etc/hosts
127.0.0.1 localhost127.0.1.1 guest-desktop203.0.113.10 example.com203.0.113.10 test.com
Esto dirigirá todas las solicitudes a example.com
y test.com
en nuestra computadora y las enviará a nuestro servidor en 203.0.113.10
. Esto es lo que queremos si no somos los propietarios reales de estos dominios para probar nuestros hosts virtuales.
Guarde y cierre el archivo.
Paso 7: Prueba de los resultados
Ahora que tienes configurados tus hosts virtuales, puedes probar tu configuración fácilmente yendo a los dominios que configuraste en tu navegador web:
http://example.com
Deberías ver una página como esta:
De igual forma si puedes visitar tu segunda página:
http://test.com
Verás el archivo que creaste para tu segundo sitio:
Si ambos sitios funcionan bien, habrás configurado exitosamente dos hosts virtuales en el mismo servidor.
Si modificó el archivo de hosts de su computadora personal, es posible que desee eliminar las líneas que agregó ahora que verificó que su configuración funciona. Esto evitará que su archivo de hosts se llene con entradas que en realidad no son necesarias.
Si necesita acceder a esto a largo plazo, considere comprar un nombre de dominio para cada sitio que necesite y configurarlo para que apunte a su servidor VPS.
Conclusión
Si siguió los pasos, ahora debería tener un solo servidor que gestione dos nombres de dominio independientes. Puede ampliar este proceso siguiendo los pasos que describimos anteriormente para crear hosts virtuales adicionales.
No hay límite de software en la cantidad de nombres de dominio que Apache puede manejar, así que siéntete libre de crear tantos como tu servidor sea capaz de manejar.
Deja una respuesta