El uso de un servidor local, además de ser necesario para procesar el código PHP, nos permite trabajar cómodamente en nuestro ordenador, y una vez terminado el trabajo a desarrollar, subir el proyecto realizado a un servidor VPS, dedicado o hosting compartido, para que pase a estar accesible para el mundo entero.
Pero en cuanto subes tu proyecto a internet, tienes que empezar a retocar el código cambiando la URL que has estado usando del tipo http://localhost:8888/misuperweb por el dominio real que tendrá el proyecto del tipo https://www.misuperweb.com.
Para evitar estos arreglos o minimizarlos, una solución es usar host virtuales, o virtual hosts.
¿Que es un host virtual en Apache?
Los virtual host en Apache nos permiten acceder a múltiples páginas web con sus respectivos dominios, que están alojadas en un mismo servidor con una sola IP.Veámoslo con un ejemplo: En un hosting compartido que tiene una sola dirección IP hay 3 páginas web de diferentes clientes. Estas webs son:
www.pajarosdelmundo.com
www.cosasparaperros.es
www.casasparahormigas.net
Todas ellas tienen la misma direccion IP: 185.10.15.20. Pero sin embargo, cuando accedemos a www.pajarosdelmundo.com accedemos a la web de www.pajarosdelmundo.com y no a las otras web. ¿Porque? Pues por que el hosting compartido tiene configurado 3 virtualhost, uno para cada uno de las webs que hay alojadas, y así sabe que si alguien accede a www.pajarosdelmundo.com tiene que redirigir al usuario a la carpeta donde está alojada la página web de www.pajarosdelmundo.com y no a ninguna otra.
¿Debería usar virtual hosts en mi servidor local?
Pues obviamente, no es una obligación pero si ofrece muchas ventajas hacerlo… Por ejemplo:Si solo estás trabajando en un proyecto, puedes crear y configurar un virtual host en Apache para poder acceder a tu proyecto, con la misma dirección URL que tendrá el proyecto final. De esta manera al subir la web al hosting o VPS no tendrás que estar modificando código para cambiar las URL de http://localhost/miweb a www.miweb.com
Si estás trabajando en varios proyectos de forma simultánea, y quieres configurar varios virtual hosts en apache, conseguirás tener una dirección diferente para cada uno de ellos.
¿Cómo crear y configurar vhosts en Apache?
Veamos paso a paso como crear varios virtual host en apache en esta ocasión lo haremos en un Mac con MAMP instalado:1. Redirigir la URL que queremos usar a nuestro ordenador
Lo primero que tendremos que hacer, es decirle a nuestro ordenador, que cuando yo ponga www.misuperweb.com en el navegador, no se vaya a internet a esa URL o en el caso de que no la encuentre se ponga a buscarla en Google.Para ello lo que haremos será redirigirla a nuestro ordenador, ya que es allí donde estará alojada nuestra web.
¿Pero cuál es la dirección de mi ordenador?
Todos los ordenadores tienen una dirección IP que es la propia máquina. Esa dirección es siempre 127.0.0.1. Es decir, si yo pongo 127.0.0.1 en el navegador de mi Macbook, el navegador se irá mi propio Macbook. También se conoce como localhost.
Obviamente, si no tengo un servidor web ejecutándose en mi ordenador, no encontrará nada y el navegador te dará un error del tipo 404 Not found (o similar)
Una vez sabemos ya que nuestro ordenador tiene la dirección IP 127.0.0.1, tenemos que decirle que www.misuperweb.com apunte a dicha dirección.
¿Como redirigimos una url cualquiera a nuestro ordenador?
El modo mas sencillo de hacerlo es editando el archivo hosts.El archivo hosts es un archivo que indica a donde tienen que apuntar las direcciones que le indiquemos.
Tiene una estructura muy básica, compuesta por dos columnas:
En la primera columna se pone la dirección a la cual queremos redirigir
En la segunda columna se pone la dirección que queremos redirigir
Como se puede ver en la imagen, cuando ponga localhost, redirigirá a127.0.0.1, cuando ponga misuperweb.com redirige a 127.0.0.1 (mi ordenador) y cuando ponga broadcasthost redigirá a 255.255.255.255 (todos los ordenadores de mi red)
Lo único que he hecho ha sido modificar el archivo hosts añadiendo la última linea.
¿Como modificar el archivo hosts en Mac?
Para modificar el archivo hosts en Mac lo mejor es hacerlo por terminal, ya que el archivos hosts solo puede modificarse por un usuario administrador.Por lo tanto abrimos el terminal, y ponemos:
sudo nano /etc/hosts
nos pedirá la contraseña de nuestro usuario y se abrirá el archivo hosts.
Nos dirigimos al final del archivo y añadimos la línea
127.0.0.1 misuperweb.com
En el caso que quieras añadir mas de un proyecto añadelos también en otras líneas. por ejemplo así:
127.0.0.1 misuperweb.com 127.0.0.1 casasparahormigas.net 127.0.0.1 cosasparaperros.es
Guarda el archivo con ctrl+x y confirmando el guardado. A partir de ahora cada vez que ingreses una de las tres URL redirigirán a tu máquina.
Pero aún queda trabajo por hacer. Hasta ahora lo único que hemos hecho ha sido redirigir de una dirección a otra. Apache no sabe que la petición de cada una de las webs va a un sitio diferente. Ésto lo vamos a hacer en el siguiente paso.
2. ¿Cómo configurar virtualhosts en Apache en MAMP?
En este paso lo que haremos será indicarle a Apache que vamos a usar host virtuales por un lado, y por otro configurar cada uno de los hosts que vamos a usar.Indicar a Apache que vamos a usar Hosts Virtuales
Primeramente recuerdo que tenemos que tener instalado MAMP.Ahora tenemos que editar el archivo de configuración de Apache en MAMP. Ese archivo es el archivo httpd.conf que se encuentra en: sudo nano /Applications/MAMP/conf/apache/httpd.conf
En el caso que no tengas el archivo en esa ubicación por que tengas una versión diferente de MAMP y haya cambiado la ubicación, puedes buscar el archivo con el comando:
sudo find /Applications/MAMP/ -iname "httpd.conf"
y te aparecerá en la ubicación en la que está alojado dicho archivo.
Lo que tenemos que modificar en el archivo es una línea de configuración. Lo puedes hacer con terminal o con un editor de texto, pero ten en cuenta que el archivo al ser un archivo de sistema, tendrás que abrirlo como administrador, si no no te dejará guardarlo.
Yo lo haré por terminal directamente con la orden sudo para ecitar esos problemas de permisos. Así que en el terminal tecleo esto:
sudo nano /Applications/MAMP/conf/apache/httpd.conf
y en el archivo en cuestión buscaremos la línea que pone esto:
# Virtual hosts # Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
Esta linea está casi al final del archivo (20-30 lineas últimas mas o menos), y tenemos que descomentar la línea que empieza por Include. Para descomentar una línea se hace eliminando la almohadilla. Así es como tiene que quedar:
# Virtual hosts Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
Guardamos con ctrl+x y confirmamos los cambios.
Con este paso le hemos dicho a Apache que vamos a usar varios virtual host
Configurar dos virtual host en Apache
Ahora vamos a configurar dos virtual host en apache. Podemos configurar sólo uno, o 25. Pero para el ejemplo nos vale con dos.Si somos un poco observadores, habremos deducido que la linea que hemos descomentado en el paso anterior lo que hace es incluir el archivo httpd-vhosts.conf para tener en cuenta lo que hay en ese archivo escrito.
Pues lo que vamos a hacer ahora es precisamente editar ese archivo. Así que volvemos a teclear en el terminal:
sudo nano /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
El archivo en cuestión nos muestra un par de ejemplos predefinidos de virtual hosts:
Explicación de los campos de un virtualhost
Vamos a analizar que significan cada una de las lineas que se muestran en la imagen anterior.Todas las lineas que empiezan con # son comentarios. Por lo tanto solo sirven para darnos información.
La línea NameVirtualHost *:80 indica que cualquier URL que entre por el puerto 80 puede ser un virtualhost
La línea <VirtualHost *:80> indica el comienzo de un host virtual que vamos a crear y por lo tanto la línea </VirtualHost> indica el final de un virtual host. Por lo tanto en la imagen se ven dos virtualhost en Apache configurados.
La línea ServerAdmin indica el email del administrador del virtualhost en cuestión. Es el email donde Apache mandará las notificaciones al respecto de ese virtualhost. No es un campo obligatorio.
La siguiente línea DocumentRoot /Applications/MAMP/Library/docs/dummy-host.example.com es la ubicación donde se encuentra el proyecto o página web que estamos creando. Esta línea SI es obligatoria.
La línea de ServerName dummy-host.example.com indica la URL que queremos usar para dirigirnos al proyecto indicado en la línea anterior. Esta línea SI es obligatoria.
las dos últimas líneas indican la ubicación donde se almacenarán los logs del proyecto. No son obligatorias.
Sabiendo todo esto, será facil configurar dos virtualhost en Apache. Simplemente tendremos que añadir las siguientes líneas:
<VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/misuperweb" ServerName misuperweb.com </VirtualHost>
Es muy sencillo: Le decimos la ubicación donde tenemos nuestra web guardada, y le decimos a través de que URL vamos a acceder a ella.
Las demás líneas no son necesarias ponerlas, aunque si puedes ponerlas de forma personalizada si las necesitas.
Adicionalmente podemos añadir uno o varios alias:
<VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/misuperweb" ServerName misuperweb.com ServerAlias www.misuperweb.com </VirtualHost>
Con la línea ServerAlias www.misuperweb.com le estamos indicando a Apache que si accedemos a www.misuperweb.com, es lo mismo que si accedemos a misuperweb.com. Ambas URL nos llevarán a la web alojada en /Applications/MAMP/htdocs/misuperweb
Finalmente añadiremos otro virtualhost mas para hacer pruebas:
<VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/casashormigas" ServerName casasparahormigas.es ServerAlias www.casasparahormigas.es </VirtualHost>
3. Guardar cambios y reiniciar servidor Apache.
Ya está todo configurado correctamente. Solo nos queda guardar los cambios en el archivo httpd-vhosts.conf (recuerda que se hace con ctrl+x y confirmando los cambios) y una vez hecho todo esto, nos quedará reiniciar el servidor Apache.¿Cómo reiniciar el servidor apache en MAMP?
La manera de reiniciar el servidor Apache en MAMP es tan simple como abrir MAMP y darle al botón de detener servidores. En la versión que estoy usando yo de MAMP pone simplemente stop:Cuando vuelvas a iniciar el MAMP, ingresa en tu navegador la URL misuperweb.com y deberías ver el archivo index.html que tengas alojado en la carpeta /Applications/MAMP/htdocs/misuperweb. De igual manera, al ingresar la URL www.casasparahormigas.es deberías ver el proyecto que tengas alojado en la carpeta /Applications/MAMP/htdocs/casashormigas
De esta manera podrás trabajar con nombres de dominios finales, y con varios proyectos simultáneamente en tu ordenador.
Si tienes cualquier duda deja un comentario y te responderé lo antes posible!
Espero que os haya sido de utilidadad este tutorial!