Cómo crear hosts virtuales en Apache

Apache

Cuando desarrollas una aplicación o cuando la tienes en producción en tu servidor, la creación de virtualhosts se hace necesaria, ya que de este modo cada proyecto puede tener su propia configuración en Apache y su propio dominio o subdominio.

Apache no acepta la creación de hosts virtuales con su configuración de serie, requiriendo ciertos cambios en su configuración. Según el sistema operativo en el que quieras crear el host virtual, tendrás que seguir unos pasos ligeramente distintos, aunque las únicas diferencias suelen estar en la localización de los archivos de configuración del servidor.

Si usas alguna aplicación todo en uno que incluye Apache como parte de un conjunto de aplicaciones, puedes consultar también los siguientes tutoriales específicos, en los que se explica cómo crear hosts virtuales en XAMPP, cómo crear hosts virtuales en WAMP y cómo crear hosts virtuales en MAMP.

Si por el contrario has instalado Apache de forma independiente, sigue los pasos que se muestra a continuación para crear un host virtual, según cual sea tu sistema operativo.

Hosts virtuales en Windows con Apache

Daremos por hecho que ya tienes Apache en tu sistema operativo. Si no es así, consulta el siguiente tutorial, en el que se explica cómo instalar Apache en Windows. Luego, sigue los pasos que se describen en las secciones que ves a continuación:

Edita el archivo httpd.conf

El primer paso consiste en editar el archivo de configuración de Apache para habilitar la creación de hosts virtuales, ya que por defecto, el archivo de configuración de los hosts virtuales se excluye de la configuración, por lo que no se carga cuando inicias Apache.

Solamente deberás realizar este proceso la primera vez que creas un host virtual. En concreto, vamos a agregar el archivo httpd-vhosts.conf. Para agregarlo sigue los pasos que ves a continuación:

  1. Debes acceder al directorio de instalación de Apache, que por defecto suele estar en la carpeta raíz de tu disco duro y suele tener el nombre de Apache + un número de versión. Es decir, que si  usas la versión 2.4 de Apache, el directorio de Apache seguramente sea el directorio C:\Apache24.
  2. Luego edita el archivo \conf\httpd.conf con cualquier editor de texto y busca la siguiente línea:

    #Include conf/extra/httpd-vhosts.conf
  3. Debes borrar el comentario de la línea, para lo cual tienes que borrar el caracter # del inicio de la misma:
    Include conf/extra/httpd-vhosts.conf
  4. Busca también el bloque <Directory /> y modifica la opción AllowOverride, dándole el valor de All:
    <Directory />
      Options Indexes FollowSymLinks
      AllowOverride All
    </Directory>
  5. Finalmente debes guardar el archivo.

Ahora tendrías que reiniciar Apache, aunque no lo haremos todavía, ya que también debemos modificar otro archivo.

Edita el archivo httpd-vhosts.conf

Ahora vamos a agregar el host virtual en el archivo httpd-vhosts.conf, que ahora ya será cargado por Apache. Para ello, sigue los pasos que se describen a continuación:

  1. Accede al directorio de instalación de Apache y editar el archivo \conf\extra\httpd-vhosts.conf con cualquier editor de texto. Por defecto, este archivo se encuentra en el directorio C:\apache\conf\extra\httpd-vhosts.conf.
  2. Ahora agrega el siguiente bloque de código, en el que definimos el dominio que tendrá el host virtual mediante la opción ServerName y también el directorio en el que estarán sus archivos, gracias a la opción DocumentRoot. Así que debes reemplazar midominio.localhost por el dominio que quieras asignar a tus host virtual, y c:\ruta\proyecto por el directorio absoluto en el que están los archivos del proyecto:
    <VirtualHost *:80>
      ServerName midominio.localhost
      DocumentRoot "c:/ruta/proyecto"
    </VirtualHost>
  3. Finalmente, guarda el archivo.

Como recomendación, el dominio debería tener la extensión .localhost para evitar posibles problemas con tu navegador.

Edita el archivo de hosts

Todavía tenemos que agregar el dominio que hemos especificado el archivo de hosts de Windows para que lo busque localmente y no en el exterior. Para ello sigue estos pasos:

  1. Edita el archivo C:\WINDOWS\system32\drivers\etc\hosts con cualquier editor de texto.
  2. Agrega la siguiente línea al final del archivo, reemplazando midominio.localhost por el dominio que hayas especificado en el archivo httpd-vhosts.conf:
    127.0.0.1 midominio.localhost
  3. Luego guarda el archivo.

De esta forma, Windows ya debería reconocer el dominio como local. En caso de que el dominio no sea detectado, prueba a vaciar la caché DNS de Windows.

Finalmente tienes que reiniciar Apache. Abre una ventana de línea de comandos o símbolo del sistema y desplázate el directorio /bin que verás en el directorio de instalación de Apache. Una vez estés en este directorio, usa el siguiente comando para reiniciar Apache y que se aplique la nueva configuración:

httpd -k restart

Hosts virtuales en Linux con Apache

Ahora vamos a ver cómo crear un host virtual en Linux. El proceso puede diferir dependiendo de la distribución de Linux, ya que pueden usar diferentes gestores de paquetes. En este caso veremos cómo crear un host virtual en Ubuntu, que es una de las distribuciones más utilizadas.

Sin embargo, los pasos también son válidos para Mint, Debian y derivados. En este ejemplo usamos el editor de texto gedit, pero podrías usar cualquier otro, como kate o nano.

Lo primero que debes hacer es crear un directorio para el host virtual, que en este ejemplo será el directorio /home/edu/http/midominio.localhost/public_html. Para ello sigue estos pasos:

  1. Crea el directorio del en el que estarán los archivos del host virtual:
    sudo mkdir -p /home/edu/http/midominio.localhost/public_html
  2. Modifica los permisos del directorio de modo que el dueño del mismo sea el usuario actual, imprescindible dependiendo del directorio que hayas escogido:
    sudo chown -R $USER:$USER /home/edu/http/midominio.localhost/public_html

Edita el archivo httpd.conf

Vamos a editar el archivo apache2.conf, que es el nombre del archivo de configuración de Apache en Ubuntu, Mint y distribuciones Debian:

  1. Lo primero que debes hacer es abrir la terminal de comandos de Linux y editar el archivo de configuración de Apache con cualquier editor de texto:
    sudo gedit /etc/apache2/apache2.conf
  2. Debes buscar la siguiente línea y eliminar el comentario borrando el símbolo # que se muestra al inicio de la línea, si es que está presente, claro:

    IncludeOptional conf-enabled/*.conf
  3. Elimina tambiéne el comentario de la línea siguiente:
    IncludeOptional sites-enabled/*.conf
  4. Ahora, debes buscar el bloque <Directory /> y modificar la opción AllowOverride para que tenga el valor All. También debes modificar la opción Require para que tenga el valor all granted:

    <Directory />
      ..
      AllowOverride All
      Require all granted
    </Directory>
  5. Luego guarda el archivo.

Para aplicar la configuración deberías reiniciar Apache, pero todavía no lo haremos, ya que tenemos que modificar otros archivos primero.

Edita el archivo [host].conf

Vamos a crear un archivo de configuración especíico para el host virtual. Sigue estos pasos:

  1. Copia los contenidos del archivo que se usa para los virtual hosts por defecto 000-default.conf a otro archivo de configuración que usaremos con el host:
    sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/midominio.localhost.conf

    En este caso le hemos dado el nombre de midominio.localhost.conf al archivo, ya que midominio.localhost es el nombre del host que queremos usar. Es importante que el arhcivo tenga la extensión .conf, ya que de lo contrario no funcionará. Además, el host debería tener la extensión .localhost para evitarte problemas.

  2. Ahora edita arl archivo de configuración que acabas de crear:
    sudo gedit /etc/apache2/sites-available/midominio.localhost.conf
  3. Debes agregar tanto el dominio que vas a usar mediante la opción ServerName como la ruta de los docuementes mediante la opción DocumentRoot:
    <VirtualHost *:80>
       ServerName midominio.localhost
       ServerAlias www.midominio.localhost
       DocumentRoot /home/edu/http/midominio.localhost/public_html
    </VirtualHost>
    

    Debes reemplazar midominio.locahost por el nombre que quieres que tenga el host y el directorio /home/edu/http/midominio.localhost/public_html por aquel en donde están los archivos de tu proyecto. Deja el resto de los elementos que pueda haber entre la etiqueta <VirtualHost *:80> y la etiqueta </VirtualHost> con su  valor por defecto.

  4. Ahora debes deshabilitar el archivo de hosts por defecto mediante el siguiente comando:
    sudo a2dissite 000-default.conf
  5. Ahora agrega el archivo de configuración del host virtual que estamos creando:
    sudo a2ensite midominio.localhost.conf
  6. Ahora vamos a reiniciar Apache para que reconozca la configuración:
    sudo systemctl restart apache2

Ahora todavía tenemos que agregar el host al sistema para que lo reconozca como local.

Edita el archivo de hosts

Vamos a configurar el host virtual que hemos agregado de modo que el sistema lo busque localmente:

  1. Abre la terminal de comandos y ejecuta el siguiente comando para abrir el archivo de configuración de hosts:
    sudo gedit /etc/hosts
  2. Debes añadir la línea siguiente al final del archivo, remeplazando miproyecto.localhost por el nombre de tu host virtual:

    127.0.0.1 miproyecto.localhost
  3. Finalmente guarda el archivo.

Tras reiniciarlo, ya deberías ver el proyecto de tu directorio si accedes a la URL miproyecto.localhost.

Hosts virtuales en Mac con Apache

Ahora vamos a ver cómo crear un host virtual en macOS. Decir que si has instalado Apache mediante Homebrew, puede que la localización de los archivos de configuración sea diferente. Para crear crear un host virtual con Apache en macOS, sigue los pasos que se describen en las secciones que ves a continuación.

Edita el archivo httpd.conf

Lo primero que haremos será editar el archivo de configuración de Apache para habilitar la creación de hosts virtuales. Este archivo está por defecto en ruta /etc/apache2/httpd.conf. Solamente tendrás que hacer este cambio la primera vez que agregues un host virtual. Sigue estos pasos:

  1. Debes abrir una ventana de terminal de comandos y  editar el archivo /etc/apache2/conf/httpd.conf con cualquier editor de texto, como por ejemplo nano:

    sudo nano /etc/apache2/conf/httpd.conf
  2. Luego busca la siguiente línea en el archivo:

    #Include /etc/apache2/extra/httpd-vhosts.conf

    Debes eliminar el comentario de la línea borrando el caracter # del principio:

    Include /etc/apache2/extra/httpd-vhosts.conf

    Esta línea también podría aparecer así:

    #Include /private/etc/apache2/extra/httpd-vhosts.conf

    Dependiendo de tu version de MacOS, el archivo httpd-vhosts.conf también podría aparecer así en el archivo:

    Include /private/etc/apache2/extra/httpd-vhosts.conf

    Procede de mismo modo y elimina el comentario de la línea:

    #Include /private/etc/apache2/extra/httpd-vhosts.conf
  3. Ahora buscal el bloque <Directory /> y dale el valor All a la opción AllowOverride:
    <Directory />
      Options Indexes FollowSymLinks
      AllowOverride All
    </Directory>
  4. Luego guarda el archivo..

Ahora tendrías que reiniciar Apache, aunque no lo haremos todavía, ya que también debemos modificar otro archivo.

Edita el archivo httpd-vhosts.conf

Ahora vamos a configurar el host virtual en el archivo de hosts virtuales de Apache. Sigue estos pasos:

  1. Vamos a editar el archivo httpd-vhosts.conf de Apache:
    sudo nano /etc/apache2/extra/httpd-vhosts.conf
  2. Luego agrega el siguiente bloque con la configuración del host, definiendo el dominio mediante la opción ServerName y también el directorio en donde está el proyecto mediante la opción DocumentRoot. Debes reemplazar midominio.localhost por el dominio del host virtual que pretendes crear y /usr/docs/midominio.localhost por el de archivos del host:
    <VirtualHost *:80>
      ServerName midominio.localhost
      DocumentRoot "/usr/docs/midominio.localhost"
    </VirtualHost>
  3. Finalmente guarda el archivo.

Para evitar problemas, es recomendable que el dominio del host tenga la extensión .localhost.

Edita el archivo de hosts

Ahora vamos a agregar el dominio que hemos configurado como host virtual al achivos de hosts de macOS:

  1. Edita el archivo /etc/hosts con cualquier editor de texto:
    sudo nano /etc/hosts
  2. Luego agrega el dominio especificando primero la IP local y luego el domio que hayas escogido para tu host virtual:
    127.0.0.1 midominio.localhost
  3. Tras guardar el archivo, deberías vaciar la caché DNS de macOS mediante este comando:
    dscacheutil -flushcache

Y con esto, macOS ya debería reconocer el dominio como loca.

Finalmente, debes reiniciar Apache mediante el siguiente comando:

sudo apachectl restart

Y tras esto ya debreías poder acceder a tu host virtual desde tu navegador.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

1 comentario en “Cómo crear hosts virtuales en Apache

  1. Buenas! Estoy instalándolo en Windows y cuando hago el paso #1.3 se me caga todo. Antes de eso funciona bien el host; teniendo en cuenta que funciona sin hacer ese paso, debería obviarlo?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”