Instalar un dominio en Apache con Virtual Host en Ubuntu

  • Por
En este tutorial vamos a conocer los pasos necesarios para instalar un dominio en un servidor Apache con VirtualHost, indicado para servir varios dominios desde un servidor, con Ubuntu.

El Virtual Host de Apache es una funcionalidad que nos permite alojar varios dominios en un solo servidor web, algo muy habitual en el día a día de cualquier administrador de sistemas. Nosotros vamos a ver en esta guía los pasos necesarios para poder configurarlo

Hay que decir no obstante que este proceso es delicado y la seguridad es muy importante, ya que vamos a estar abiertos a Internet. No pretendemos dar una guía sobre seguridad, sino centrarnos en lo necesario para hacer funcionar Apache con varios dominios en un servidor.

Usaremos Ubuntu en su versión 16.04.

Instalar Apache

Comenzamos instalando el servidor web Apache en nuestro servidor. Para ello corremos los siguientes comandos:

apt-get update

Y luego la instalación de Apache:

apt-get install apache2
Nota: Quizás tengas que hacer "sudo apt-get update" y "sudo apt-get install apache2", si es que no estás conectado como root. O quizás "sudo su" para escalar a root y realizar todo el proceso siguiente sin tener que escribir "sudo" antes de cada Comando. En este tutorial lo advertimos con la presente nota y colocaremos los comandos sin "sudo" porque entendemos que conoces esta operativa.

Crear la carpeta donde vamos a alojar los archivos de la web

Comenzaremos haciendo esta operación para un dominio, pero será básicamente la misma para cada dominio que quieras alojar.

Vamos a suponer que tienes el dominio example.com y que lo quieres alojar en este servidor. Primero debemos crear la carpeta donde se van a colocar los archivos, que suele estar dentro de "/var/www/" y luego el nombre del dominio, seguida del directorio que quieras usar como "document root" (carpeta raíz pública para los archivos del dominio). Quedará para example.com con algo como "/var/www/example.com/httpdocs". La haces con el siguiente comando:

mkdir /var/www/example.com/httpdocs -p
Nota: Hemos colocado "httpdocs" como document root. Esto es configurable a tu gusto. Muchas personas prefieren usar algo "public_hml", "html", "www" o "htdocs". Al final es lo mismo, con tal que te acuerdes de esa carpeta creada y la uses tal cual en los pasos siguientes.

Ahora esa carpeta que acabamos de crear pertenece al usuario "root", pero el usuario de Apache suele ser "www-data" en un sistema basado en Debian como Ubuntu. Vamos a pasar la propiedad de las carpetas al nuevo usuario.

chown www-data:www-data /var/www/example.com -R
Nota: Este paso del usuario www-data no sería necesario hacerlo. Nuestra compañera y colaboradora Eugenia Bahit nos informa lo siguiente:

El usuario www-data es un usuario que crea Apache pero NO es el usuario DE Apache.​​ Apache crea a este usuario para que las personas que accedan a una web (usuario comunes) naveguen esa web SIN utilizar un usuario del sistema con permisos especiales. www-data es un usuario de "lectura" pero no escribe ni administra. Quien lo hace, es root.

Entonces, tu tienes una carpeta cuyo propietario es juan. Esto significa que juan puede borrar la carpeta completa, por ejemplo. Entonces si el propietario es www-data significa que www-data puede borrar la carpeta completa. Por lo tanto, si www-data es cualquier usuario que navega una web y, el propietario de una carpeta puede borrarla; si www-data es propietario significa que CUALQUIER USUARIO QUE NAVEGA UNA WEB PUEDE BORRAR LA CARPETA.

Los usuarios que NO son dueños de un directorio o archivo, son clasificado como "otros usuarios" y están representados por el tercer grupo de permisos. Un directorio con permisos 755 equivale a: rwx r-x r-x. Primer grupo (rwx = 4+2+1 = 7), dueño. Segundo grupo (r-x = 4+1 = 5), el grupo de usuarios y tercer grupo, "otros usuarios" (igual al anterior).

Al dar permisos 755 (con las instrucciones que aparecen en el siguiente paso) YA estás permitiendo a www-data que lea acceda a la carpeta y la lea. No necesitas nada más. Por eso, el paso del chown es innecesario. Y es inseguro porque la carpeta raíz de una web a disposición absoluta de cualquier usuario anónimo.

Por otra parte, obliga al desarrollador a tener que convertirse en www-data para poder guardar los archivos de la web en esa carpeta. Lo lógico es que el propietario sea el usuario desarrollador, es lo más seguro ;) y sino, que quede a nombre de root, que es una cagada pero al menos no es un riesgo.

En cuanto a los permisos de las carpetas vamos a modificarlos también para asignarle los que deberían tener:

chmod -R 755 /var/www/example.com

Crear un documento para servir en la carpeta httpdocs

Solo para probar que todo nos funciona correctamente, vamos a crear un archivo index.html que nos servirá como prueba.

echo 'test de apache funcionando' > /var/www/example.com/httpdocs/index.html

Eso creará un archivo index.html con un texto "test de apache funcionando" en la carpeta que acabamos de crear como "document root".

Creando el Virtual Host

Para crear el host virtual vamos a apoyarnos en un archivo de configuración predeterminado de Apache. Es tan sencillo como copiarlo en la carpeta adecuada. El archivo en cuestión está en la ruta "/etc/apache2/sites-available/000-default.conf" y tenemos que copiarlo como configuración para el dominio que vamos a servir, en nuestro caso "example.com".

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

No nos vale el contenido del fichero tal como está, así que lo tendremos que editar, colocando los datos de nuestro propio dominio, correo del administrador, carpeta elegida como document root, etc.

Nota: Lo puedes editar con tu editor preferido, yo suelo usar vim. Como este comando no está de manera predeterminada en Ubuntu, igual lo tienes que instalar (apt-get install vim). Otras personas usan Nano, que es un editor también de Línea de comandos quizás más sencillo de usar.
vim /etc/apache2/sites-available/example.conf

Verás que tiene mucho código el archivo de configuración, pero la mayoría son comentarios que podrías incluso borrar. Además tienes que agregar un nombre al servidor "ServerName" con el nombre de tu dominio y si quieres un "ServerAlias".

Te podría quedar más o menos de esta manera:

<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin webmaster@desarrolloweb.com
        DocumentRoot /var/www/example.com/httpdocs
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Esto no acaba aquí, tienes que habilitar el dominio con el comando "a2ensite" y el nombre del archivo de configuración del Virtual Host que acabamos de crear para tu dominio, que quieras decirle a Apache que vas a servir.

a2ensite example.conf

Por último vamos a reiniciar Apache.

service apache2 reload
Nota: Hay un comando "apache2ctl -t" que te viene bien para ver si la sintaxis de los virtual host está correcta y te alerta de los fallos. Ahora no importa mucho, porque no tenemos más dominios funcionando en el servidor, pero cuando haya varios y querramos agregar o modificar los virtual host es muy útil, ya que te asegura que, cuando reinicies Apache, no se rompa nada.

Con esto hemos terminado la configuración de Apache. Tendrás que repetir este proceso con los otros Host Virtuales que quieras servir desde este mismo servidor.

Acceder al dominio y probar el resultado

Para acceder al dominio que acabas de configurar necesitarás configurar los registros de DNS para el dominio que acabas de crear, asociando los registros A a la IP de tu servidor. Es un paso sencillo, pero que no haces dentro de la consola, sino con el registrador donde tengas tu dominio. Cambia mucho dependiendo qué empresa es la que usas para comprar tus dominios.

Pero si no tienes dominio o no sabes cómo hacer este paso, otra alternativa es falsear la DNS a través del archivo "hosts" de tu ordenador. Esto lo consigues colocando en el archivo "hosts" la IP del servidor y el nombre del dominio que has configurado en tu virtual host en Apache. Para saber cómo alterar tu archivo Hosts, lee el artículo Modificar el archivo de Hosts en Windows, Linux y Mac.

Una vez realizada una de estas dos alternativas (modificar las DNS reales de un dominio en el proveedor donde lo hayas registrado o modificar el archivo hosts) podrás acceder a la dirección del dominio a través de tu navegador.

http://example.com

Para verificar que está funcionando tienes que recibir el contenido que colocaste en tu index.html, que si recuerdas era algo como "test de apache funcionando". Si ves otra página diferente es que no estás accediendo a la carpeta correcta, en cuyo caso deberías comprobar que el archivo de configuración del Virtual Host está correcto y tiene los nombres de dominio bien, las carpetas del servidor a los caminos correctos, etc.

Con esto hemos terminado nuestro trabajo con éxito. Confío en que puedas hacer este proceso por tu cuenta y configurar un dominio tú mismo en el servidor con el que estás trabajando.

En DesarrolloWeb.com hay otros artículos interesantes que puedes leer para aprender a hacer otras cosas que seguro te estás preguntando, como instalar PHP en el servidor Linux, o la configuración de otras variables del Virtual Host. Usa el buscador interno de DesarrolloWeb.com para encontrar otra serie de artículos relacionados.