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.
Contenidos
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:
- 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
. - Luego edita el archivo
\conf\httpd.conf
con cualquier editor de texto y busca la siguiente línea:
#Include conf/extra/httpd-vhosts.conf
- 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
- Busca también el bloque
<Directory />
y modifica la opciónAllowOverride
, dándole el valor deAll
:<Directory /> Options Indexes FollowSymLinks AllowOverride All </Directory>
- 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:
- 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 directorioC:\apache\conf\extra\httpd-vhosts.conf
. - 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ónDocumentRoot
. Así que debes reemplazarmidominio.localhost
por el dominio que quieras asignar a tus host virtual, yc:\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>
- 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:
- Edita el archivo
C:\WINDOWS\system32\drivers\etc\hosts
con cualquier editor de texto. - 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
- 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:
- Crea el directorio del en el que estarán los archivos del host virtual:
sudo mkdir -p /home/edu/http/midominio.localhost/public_html
- 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:
- 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
- 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
- Elimina tambiéne el comentario de la línea siguiente:
IncludeOptional sites-enabled/*.conf
- Ahora, debes buscar el bloque
<Directory />
y modificar la opciónAllowOverride
para que tenga el valorAll
. También debes modificar la opciónRequire
para que tenga el valorall granted
:
<Directory /> .. AllowOverride All Require all granted </Directory>
- 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:
- 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 quemidominio.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. - Ahora edita arl archivo de configuración que acabas de crear:
sudo gedit /etc/apache2/sites-available/midominio.localhost.conf
- Debes agregar tanto el dominio que vas a usar mediante la opción
ServerName
como la ruta de los docuementes mediante la opciónDocumentRoot
:<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. - Ahora debes deshabilitar el archivo de hosts por defecto mediante el siguiente comando:
sudo a2dissite 000-default.conf
- Ahora agrega el archivo de configuración del host virtual que estamos creando:
sudo a2ensite midominio.localhost.conf
- 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:
- Abre la terminal de comandos y ejecuta el siguiente comando para abrir el archivo de configuración de hosts:
sudo gedit /etc/hosts
- 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
- 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:
- 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
- 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
- Ahora buscal el bloque
<Directory />
y dale el valor All a la opciónAllowOverride
:<Directory /> Options Indexes FollowSymLinks AllowOverride All </Directory>
- 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:
- Vamos a editar el archivo
httpd-vhosts.conf
de Apache:sudo nano /etc/apache2/extra/httpd-vhosts.conf
- 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ónDocumentRoot
. Debes reemplazarmidominio.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>
- 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:
- Edita el archivo
/etc/hosts
con cualquier editor de texto:sudo nano /etc/hosts
- 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
- 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.
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?