Vamos a ver como crear varios hosts virtuales para alojar varios sitios web en un mismo servidor Apache, paso a paso.
Como crear hosts virtuales en un servidor Apache con Ubuntu 20.04.4 Server
Sumario
- Creación de la estructura de directorios.
- Concedemos permisos
- Creamos páginas de prueba para cada host virtual
- Creamos los ficheros de configuración de los hosts virtuales
- Directivas contenidas en el fichero de configuración del host virtual
- Creamos el primer fichero de configuración de host virtual
- Creamos el segundo fichero de configuración de host virtual
- Habilitamos los ficheros de configuración
- Configurar el fichero de hosts locales.
Creación de estructura de directorios
El primer paso que daremos es crear una estructura de directorios que albergará los datos de los sitios que Apache servirá a los visitantes.
Fijaremos en nuestro «document root», el directorio en el que Apache busca el contenido que ha de servir, una estructura de directorios individuales bajo el directorio /var/www/. Crearemos un directorio aquí para cada host virtual que necesitemos.
En cada uno de estos directorios, crearemos un directorio «public_html» que contendrá nuestros ficheros. Esto nos permitirá alojar tantos sitios web como queramos.
Por ejemplo, para nuestros sitios crearemos una estructura de directorios como vemos a continuación. Un directorio para «weblinus.local» y otro para «trufaslaencina.local».
sudo mkdir -p /var/www/weblinus.local/public_html sudo mkdir -p /var/www/trufaslaencina.local/public_html
Concedemos permisos
Tenemos la estructura de directorios que buscábamos para alojar nuestros sitios, pero son propiedad del usuario «root». Para que el usuario apache pueda escribir y modificar ficheros en estos directorios, tenemos que cambiar la propiedad con los siguientes comandos,
sudo chown -R www-data:www-data /var/www/weblinus.local/public_html sudo chown -R www-data:www-data /var/www/trufaslaencina.local/public_html
Como vemos hemos cambiado la propiedad de los directorios raiz de los dominios y de todos los que contenga (opción -R, recursivo) a «www-data» que es el usuario de Apache.
También deberemos cambiar los permisos para garantizar el acceso de lectura al directorio web general y a los ficheros y directorios que contenga y se puedan servir las páginas solicitadas,
sudo chmod -R 755 /var/www
De esta manera tenemos el servidor web con los permisos necesarios para servir contenidos y para que el usuario pueda crearlos en el directorio conveniente.
Creamos páginas de prueba para cada host virtual
Crearemos un contenido de prueba para comprobar su funcionamiento. Para ello, haremos una página «index.html» para cada sitio web.
Vamos con «weblinus.local». Abrimos un fichero «index.html» con un editor de texto, en este caso «nano».
sudo nano /var/www/weblinus.local/public_html/index.html
Copia y pega el código que viene a continuación en el fichero y cambia los datos por los que quieras.
<html> <head> <title>weblinus.local</title> </head> <body> <h1>Conseguido! El host virtual <strong> weblinus.local</strong> esta funcionando!</h1> </body> </html>
Guardamos y cerramos el fichero.
Por economía y eficiencia en el trabajo, podemos copiar este fichero y usarlo para el segundo sitio.
sudo cp /var/www/weblinus.local/public_html/index.html /var/www/trufaslaencina.local/public_html/index.html
Hacemos las modificaciones a este fichero.
sudo nano /var/www/trufaslaencina.local/public_html/index.html
<html> <head> <title>trufaslaencina.local</title> </head> <body> <h1>Conseguido! El host virtual <strong> trufaslaencina.local</strong> esta funcionando!</h1> </body> </html>
Guardamos y cerramos. Y ya tenemos contenido para mostrar con una solicitud al servidor Apache y comprobar si la configuración del host virtual es correcta.
Creamos los ficheros de configuración de los hosts virtuales
Los ficheros de configuración de los hosts virtuales determinan la forma en que el servidor web Apache responderá a las solicitudes que reciba de los distintos dominios que aloja.
Apache viene con un fichero de configuración por defecto «000-default.conf» que utilizaremos como plantilla para crear los que necesitamos. Lo copiamos para crear un fichero de configuración de host virtual para cada dominio a alojar. Primero veamos que opciones de configuración tenemos,
Directivas contenidas en el fichero de configuración del host virtual
La configuración predeterminada de Ubuntu requiere que cada fichero de configuración de host virtual termine con la extensión «.conf». Veamos las directivas que contiene,
- ServerName → Va a indicar el dominio que debe coincidir con esta configuración de host virtual. Este debería ser el nombre de dominio.
- ServerAlias → Todos los demás dominios o subdominios que deberían coincidir para este host virtual, como el subdominio www.
- ServerAdmin → Incluir un correo electrónico en el cual el administrador del sitio pueda recibir correos
- DocumentRoot → Aquí se indicará el directorio desde el cual Apache servirá los ficheros.
- Options → Esta directiva controla qué funciones del servidor están disponibles en un directorio específico.
- Indexes → Evita listados de directorios.
- FollowSymLinks → Cuando esta opción está habilitada, Apache va a seguir los enlaces simbólicos.
- AllowOverride → Va a especificar qué directivas declaradas en el fichero .htaccess pueden anular las directivas de configuración.
- ErrorLog, CustomLog → Aquí se van a especificar las ubicaciones de los ficheros de registro.
Creamos el primer fichero de configuración de host virtual
En este fichero, 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.
Comenzaremos con «weblinus.local», lo configuraremos y lo copiaremos para nuestro segundo dominio «trufaslaencina.local», y realizaremos los cambios necesarios.
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/weblinus.local.conf
Abrimos el nuevo fichero con un editor de texto con privilegios root
sudo nano /etc/apache2/sites-available/weblinus.local.conf
El fichero tendrá un contenido 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>
Lo modificamos para que quede de este modo,
<VirtualHost *:80> ServerName weblinus.local ServerAlias www.weblinus.local ServerAdmin webmaster@weblinus.local DocumentRoot /var/www/weblinus.local/public_html <Directory /var/www/weblinus.local/public_html> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/weblinus.local-error.log CustomLog ${APACHE_LOG_DIR}/weblinus.local-access.log combined </VirtualHost>
Creamos el segundo fichero de configuración de host virtual
Procederemos del mismo modo para crear el segundo fichero de configuración de host virtual
sudo cp /etc/apache2/sites-available/weblinus.local.conf /etc/apache2/sites-available/trufaslaencina.local.conf sudo nano /etc/apache2/sites-available/trufaslaencina.local.conf
Habilitamos los ficheros de configuración
Una vez guardados los ficheros, tenemos que habilitarlos. Para ello creamos un enlace simbólico desde el fichero de configuración de host virtual al directorio habilitado para los sitios. Utilizamos el comando «a2ensite».
sudo a2ensite weblinus.local sudo a2ensite trufaslaencina.local
Lo podemos hacer creando manualmente un enlace simbólico
sudo ln -s /etc/apache2/sites-available/weblinus.local.conf /etc/apache2/sites-enabled/ sudo ln -s /etc/apache2/sites-available/trufaslaencina.local.conf /etc/apache2/sites-enabled/
Tenemos que deshabilitar el sitio predeterminado definido en «000-default.conf»
sudo a2dissite 000-default.conf
Y comprobamos la configuración para detectar errores de sintaxis.
sudo apachectl configtest
Si no hay errores, en la terminal veremos un resultado parecido a,
Reiniciamos el servicio Apache para aplicar los cambios,
sudo systemctl restart apache2
Comprobamos el estado del servicio
sudo systemctl status apache2
Deberíamos, si todo ha ido bien, tener el servidor configurado para presentar dos sitios.
Para comprobar que hemos tenido éxito, abrimos un navegador y introducimos la URL http://weblinus.local y deberíamos ver el contenido de la página «index.html» de weblinus.local o http://trufaslaencina.local y veremos,
Configurar el fichero de hosts locales
Si modificamos el fichero «hosts» en el equipo local «localhost» podemos interceptar las solicitudes para los dominios que hemos configurado y apuntarán al servidor VPS. Este procedimiento lo realizaría el servidor DNS si utilizásemos dominios registrados. Esto solo funcionará desde «localhost». Editamos el fichero,
sudo nano /etc/hosts
Aquí debemos añadir la dirección IP pública del servidor seguida del dominio que queremos usar para alcanzar ese servidor. Por ejemplo, y siguiendo nuestra configuración, deberíamos tener el siguiente fichero,
127.0.0.1 localhost 127.0.1.1 guest-desktop 192.168.1.8 weblinus.local 192.168.1.8 trufaslaencina.local
Guardamos y cerramos el fichero.
Esto dirigirá cualquier solicitud de «weblinus.local» y «trufaslaencina.local» en nuestro equipo al servidor que le hemos indicado.
No existe un límite de software en el número de nombres de dominio que Apache puede gestionar. Este vendrá determinado por el hardware, por eso no dudes en crear tantos hosts virtuales como tu servidor pueda manejar.
Y si quieres ver como instalar y configurar un hosting privado sobre Ubuntu 20.04 Server, con Apache, MySQL y PHP, configuración del firewall UFW, y hacer la importación de la aplicación web que tenemos en el hosting, para trabajar en local, en un entorno virtual , sin miedo a romper nada sigue este enlace.
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.