Cómo configurar hosts virtuales de Apache en Ubuntu 18.04

Introducción

El servidor web Apache es una alternativa popular para presentar sitios web en Internet. Según estimaciones de 2019, se estima que presenta el 29 % de todos los sitios web activos. Además, ofrece robustez y flexibilidad a los desarrolladores. Usando Apache, un administrador puede configurar un servidor para que aloje varios dominios o sitios desde una interfaz o IP única usando un sistema de coincidencia.

Cada dominio o sitio individual, conocido como “host virtual”, que se configura usando Apache dirige al visitante a un directorio específico que alberga la información del sitio en cuestión. Esto se hace sin indicar que el mismo servidor también se encarga de otros sitios. Este esquema es ampliable sin límite de software siempre que su servidor pueda gestionar la carga. La unidad básica que describe un sitio o dominio individual se conoce como host virtual.

En esta guía, repasaremos la manera de configurar hosts virtuales de Apache en un servidor de Ubuntu 18.04. Durante este proceso, aprenderá a presentar diferentes contenidos a diferentes visitantes dependiendo de los dominios que soliciten.

Requisitos previos

Antes de iniciar este tutorial, debería crear un usuario no root.

También necesitará tener instalado Apache para completar estos pasos. Si aún no lo hizo, puede instalar Apache en su servidor mediante el paquete apt:

  • sudo apt update
  • sudo apt install apache2

Si desea acceder a instrucciones más detalladas además de la configuración del firewall, consulte nuestra guía Cómo instalar el servidor web Apache en Ubuntu 18.04.

A los efectos de esta guía, nuestra configuración creará un host virtual para example.com y otro para test.com. Estos se mencionarán en esta guía, pero debería sustituir sus propios dominios o valores a medida que avance.

Si usa DigitalOcean, puede aprender a configurar dominios siguiendo la documentación del producto: Cómo añadir dominios. Para otros proveedores, consulte la documentación pertinente de sus productos. Si no dispone de dominios en este momento, puede usar los valores de prueba.

Le mostraremos la forma de editar su archivo de hosts locales posteriormente para probar la configuración si usa valores de prueba. Esto le permitirá validar su configuración desde su ordenador de inicio, aunque su contenido no estará disponible a través del nombre de dominio para otros visitantes.

Paso uno: Crear la estructura de directorios

El primer paso que daremos es crear una estructura de directorios que albergará los datos del sitio que presentaremos a los visitantes.

Nuestro document root (el directorio de nivel superior en el que Apache busca el contenido que se presentará) se fijará en directorios individuales bajo el directorio /var/www. Crearemos un directorio aquí para ambos hosts virtuales que planeamos crear.

En cada uno de estos directorios, crearemos una carpeta public_html que albergará nuestros archivos. Esto nos dará cierta flexibilidad en nuestro hosting.

Por ejemplo, para nuestros sitios crearemos nuestros directorios como se muestra a continuación. Si usa dominios reales o valores alternativos, cambie el texto resaltado por estos.

  • sudo mkdir -p /var/www/example.com/public_html
  • sudo mkdir -p /var/www/test.com/public_html

Las partes en rojo representan los nombres de dominios que queremos presentar desde nuestro VPS.

Paso dos: Conceder permisos

Ahora tenemos la estructura de directorio para nuestros archivos, pero son propiedad de nuestro usuario root. Si queremos que nuestro usuario regular pueda modificar archivos en nuestros directorios web, podemos cambiar la propiedad haciendo esto:

  • sudo chown -R $USER:$USER /var/www/example.com/public_html
  • sudo chown -R $USER:$USER /var/www/test.com/public_html

La variable $USER llevará el valor del usuario con el que inició la sesión actual cuando pulse ENTER. Si se hace esto, nuestro usuario regular será propietario de los subdirectorios de public_html en los que almacenaremos nuestro contenido.

También deberíamos modificar nuestros permisos para garantizar que se permita el acceso de lectura al directorio web general y a los archivos y las carpetas que contiene, para que se puedan presentar correctamente las páginas:

  • sudo chmod -R 755 /var/www

Su servidor web ahora debería tener los permisos que necesita para presentar contenido y su usuario debería poder crear contenido en las carpetas necesarias.

Paso tres: Crear páginas de demostración para cada host virtual

Con esto, tendremos lista nuestra estructura de directorios. Crearemos contenido para presentarlo.

Con fines demostrativos, haremos una página index.html para cada sitio.

Comencemos con example.com. Podemos abrir un archivo index.html en un editor de texto. En este caso usaremos nano:

  • nano /var/www/example.com/public_html/index.html

En este archivo, cree un documento HTML que indique el sitio al que esté conectado, como el siguiente:

/var/www/example.com/public_html/index.html

<html>   <head>     <title>Welcome to Example.com!</title>   </head>   <body>     <h1>Success! The example.com virtual host is working!</h1>   </body> </html> 

Guarde y cierre el archivo (en nano, pulse CTRL + X, Y y luego ENTER) cuando termine.

Podemos copiar este archivo para usarlo como la base de nuestro segundo sitio escribiendo lo siguiente:

  • 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 pertiente:

  • nano /var/www/test.com/public_html/index.html

/var/www/test.com/public_html/index.html

<html>   <head>     <title>Welcome to Test.com!</title>   </head>   <body> <h1>Success! The test.com virtual host is working!</h1>   </body> </html> 

Guarde y cierre este archivo también. Ahora tiene las páginas necesarias para probar la configuración del host virtual.

Paso cuatro: Crear nuevos archivos de host virtual

Los archivos de host virtual son archivos que especifican la configuración real de nuestros hosts virtuales y determinan la forma en que el servidor web Apache responderá a varias solicitudes de dominio.

Apache cuenta con un archivo de host virtual predeterminado llamado 000-default.conf que podemos usar como punto de inicio. Lo copiaremos a fin de 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 realizaremos algunos ajustes adicionales necesarios. La configuración predeterminada de Ubuntu requiere que cada archivo de host virtual termine con .conf.

Cree el primer archivo de host virtual

Comience copiando el archivo para el 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 root:

  • sudo nano /etc/apache2/sites-available/example.com.conf

Una vez eliminados los comentarios, el archivo tendrá un aspecto similar a este:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>     ServerAdmin [email protected]     DocumentRoot /var/www/html     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

En este archivo, personalizaremos los elementos para nuestro primer dominio y añadiremos 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, debemos cambiar la directiva ServerAdmin de modo que se incluya un correo electrónico en el cual el administrador del sitio pueda recibir correos.

ServerAdmin [email protected] 

Tras esto, debemos añadir dos directivas. La primera, llamada ServerName, establece el dominio base que debería coincidir con la definición de este host virtual. Este será probablemente su dominio. El segundo, llamado ServerAlias, define nombres adicionales que deberían coincidir como si fuesen el nombre base. Esto es útil para hacer coincidir los hosts que definió, como www:

ServerName example.com ServerAlias www.example.com 

La otra cosa que debemos cambiar para nuestro archivo de host virtual es la ubicación del root del documento para este dominio. Ya creamos el directorio que necesitamos, de modo que solo debemos modificar la directiva DocumentRoot para reflejar el directorio creado:

DocumentRoot /var/www/example.com/public_html 

Una vez completado el proceso, nuestro archivo de host virtual debería tener este aspecto:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>     ServerAdmin [email protected]     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> 

En este momento, guarde y cierre el archivo.

Copiar el primer host virtual y aplicar personalización para el segundo dominio

Ahora que establecimos nuestro primer archivo de host virtual, podemos crear el segundo copiando ese archivo y aplicándole ajustes 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 root en su editor:

  • sudo nano /etc/apache2/sites-available/test.com.conf

Ahora deberá modificar todos los datos para que hagan referencia a su segundo dominio. Cuando termine, el aspecto del resultado debería ser similar al siguiente:

/etc/apache2/sites-available/test.com.conf

<VirtualHost *:80>     ServerAdmin [email protected]     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 cinco: Habilitar los nuevos archivos de host virtual

Ahora que creamos nuestros archivos de host virtual, debemos habilitarlos. Apache incluye algunas herramientas que nos permiten hacer esto.

Usaremos la herramienta a2ensite para habilitar cada uno de nuestros sitios. Si desea obtener más información sobre esta secuencia de comandos, puede consultar la documentación de a2ensite.

  • sudo a2ensite example.com.conf
  • sudo a2ensite test.com.conf

Deshabilite el sitio predeterminado definido en 000-default.conf:

  • sudo a2dissite 000-default.conf

Cuando termine, deberá reiniciar Apache para que estos cambios surtan efecto y usar systemctl status para verificar que el reinicio se haya realizado correctamente.

  • sudo systemctl restart apache2
  • sudo systemctl status apache2

Su servidor debería estar ahora configurado para presentar dos sitios web.

Paso seis: Configurar el archivo de hosts locales (opcional)

Si no ha usado nombres de dominios reales que sean de su propiedad para probar este procedimiento y ha usado algunos dominios de ejemplo, puede al menos probar la funcionalidad de este proceso modificando temporalmente el archivo hosts en su equipo local.

Con esto se interceptarán las solicitudes para los dominios que configuró y se apuntarán a su servidor VPS, procedimiento que realizaría el sistema DNS si usted usara dominios registrados. Esto solo funcionará desde su equipo local y solo con fines de prueba.

Asegúrese de usar su computadora local para estos pasos y aplicar su servidor VPS. Deberá conocer la contraseña administrativa de su computadora o ser un miembro del grupo administrativo.

Si usa una computadora con macOs o Linux, edite su archivo local con privilegios administrativos escribiendo lo siguiente:

  • sudo nano /etc/hosts

Si usa un equipo con Windows, puede encontrar instrucciones sobre cómo modificar su archivo de hosts aquí.

Los detalles que debe añadir son la dirección IP pública de su servidor seguida del dominio que desee usar para alcanzar ese servidor.

Usando los dominios que se utilizan en esta guía, y sustituyendo el IP de su servidor por el texto your_server_IP, su archivo deberá tener este aspecto:

/etc/hosts

127.0.0.1   localhost 127.0.1.1   guest-desktop your_server_IP example.com your_server_IP test.com 

Guarde y cierre el archivo.

Esto dirigirá cualquier solicitud de example.com y test.com en su computadora y la enviará a su servidor. Si no somos realmente los propietarios de estos dominios, esto es lo que nos convendrá para probar nuestros hosts virtuales.

Paso siete: Probar sus resultados

Ahora que configuró sus hosts virtuales, puede probar su configuración dirigiéndose a los dominios que estableció en su navegador web:

http://example.com 

Debería ver una página con este aspecto:

Ejemplo de host virtual de Apache

También puede visitar su segunda página y ver el archivo que creó para su segundo sitio.

http://test.com 

Prueba de host virtual de Apache

Si ambos sitios funcionan como se espera, habrá configurado correctamente dos hosts virtuales en el mismo servidor.

Si ajustó el archivo de hosts de su ordenador de inicio, quizá quiera eliminar las líneas que añadió ahora que ha verificó que su configuración funciona. Esto evitará que su archivo de hosts se llene con entradas que ya no sean necesarias.

Si debe acceder a esto a largo plazo, considere añadir un nombre de dominio para cada sitio que necesite y configurarlo de modo que se oriente a su servidor.

Conclusión

Si siguió estos pasos, ahora debería contar con un único servidor que gestiona dos nombres de dominio independientes. Puede ampliar este proceso siguiendo los pasos que indicamos anteriormente para crear hosts virtuales adicionales.

No existe un límite de software en el número de nombres de dominio que Apache puede gestionar. Por ello, no dude en crear tantos como su servidor sea capaz de manejar.