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.
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.
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.
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.
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:
<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
<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.
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
.
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:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
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 admin@example.com
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:
<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>
En este momento, guarde y cierre el archivo.
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:
<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.
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.
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:
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.
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:
También puede visitar su segunda página y ver el archivo que creó para su segundo sitio.
http://test.com
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.
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.
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!