domingo, 16 de mayo de 2010

Virtual Hosts en Apache2, para dummies

[Problema]
Visitante: "Escucha inEdit00!"
inEdit00: "Si, dime!"
Visitante: "Si, mira, que seguí tu manualillo sobre como poner arriba un servidor Apache y he estado haciendo mis cosillas. Ahora ya se HTML y CSS y he empezado a programar en PHP"
inEdit00: "Muy bien. Y cual es el problema?"
Visitante: "Pues mira, te cuento: ahora tengo dos páginas www.mipaginapersonal.com y www.lawebdemicurro.com, y, así como tu me enseñastes en el otro manual, he creado dos entradas en el fichero '/etc/hosts' así:"
127.0.0.1 www.lawebdemicurro.com
127.0.0.1 www.mipaginapersonal.com
Visitante: "Pero claro... estas dos URL's, apuntan hacia el directorio principal del servidor ( /var/www ) y puedo cargar un dominio, o el otro, pero no las dos a la vez!!"
inEdit00: "Bien, este problema que tienes se resuelve con lo que se llaman VirtualHosts. Te explico:"

[Explicación]
Cuando tu entras en una página web con tu navegador, haces una petición al servidor por REST ( órdenes del protocolo HTTP ), por ejemplo, si accedes a la URL: "http://localhost/index.html" realmente estás haciendo una petición al servidor tal que así:

GET /index.html
Host: localhost

Esto puedes verlo con programas como Wireshark, que se encargan de analizar los paquetes que viajan por la red, a bajo nivel. Bien, que significa esto?
Pues que del host "localhost" quieres el fichero "/index.html", así de simple.

Si haces una petición a la web "http://www.mipaginapersonal.com", haces una petición que sería así:

GET /
Host: www.mipaginapersonal.com

"GET" singnifica "dame", la barra ("/") significa el directorio principal ( que sería lo mismo que "/index.html" ) y el "Host" es la página que quieres cargar. En este caso, si tienes configurado el fichero "/etc/hosts" como tu me has dicho, te debería dar el contenido del fichero de "/var/www/index.html".

Otro ejemplo: Si vamos a la página web "http://www.lawebdemicurro.com" pasa lo mismo:

GET /
Host: www.lawebdemicurro.com

Dame el fichero "/" ( que Apache entiende como "/index.html" ) del Host "www.lawebdemicurro.com", y esto devuelve el fichero de "/var/www/index.html". Que es el mismo de antes!

Claro, así no puedes conseguir lo que te propones. Ya que los dos nombres de HOST distintos, apuntan al mismo sitio ( "/var/www" ).

Vale, ahora vamos a crear dos carpetas en el servidor, algo así:

$ sudo mkdir /var/www/mipaginapersonal.com
$ sudo mkdir /var/www/lawebdemicurro.com

Si te fijas, no he puesto las www. Es solo una preferencia personal. Pero son nombres de carpetas, les puedes poner los nombres que quieras. Bien, y ahora lo que haremos será crear un VirtualHost. Que me propongo? Algo así:
Cuando abramos www.mipaginapersonal.com abra la ruta /var/www/mipaginapersonal.com
Cuando abaramos www.laewebdemicurro.com abra la ruta /var/www/lawebdemicurro.com

inEdit00: "Te parece?"
Visitante: "Si, esto es jutsto lo que yo quiero!! Como se hace?"
inEdit00: "Bien, antes hagamos lo siguiente:"

$ sudo gedit /var/www/mipaginapersonal.com
Y añadimos aqui el siguiente texto "Bienvenido a mi página personal!!!". Guardamos y salimos.
$ sudo gedit /var/www/lawebdemicurro.com
Y añadimos aqui el siguiente texto "Bienvenido a la web de mi curro!!!". Guardamos y salimos.


[Virtual Hosts]
Bien, al lío, a por los virtual Hosts. Vamos a crear el siguiente fichero:
$ sudo gedit /etc/apache2/sites-aviable/lawebdemicurro.com

Y en este fichero añadiremos algo tal que así:


<VirtualHost *:80>
ServerName www.lawebdemicurro.com
ServerAlias www.lawebdemicurro.com
DocumentRoot /var/www/lawebdemicurro.com

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

</VirtualHost>



Visitante: "Vale, que significa cada línea?"
inEdit00: Bueno, con esto "" decimos que estamos creando un virtual host que "escuchará" cualquier IP de origen "*" y escucha en el puerto 80.
"ServerName" y "ServerAlias" sirven para especificar el nombre del Host. Este debe ser exactamente el que tu quieras. Y el mismo que hayas puesto en el fichero /etc/hosts, ok?
Y aquí viene la importante "DocumentRoot /var/www/lawebdemicurro.com". Te imaginas lo que es, verdad? Aqui le decimos en que carpeta tiene que buscar cuando intren en el nombre de dominio seleccionado. Capito?
Visitante: "Si, ya veo!"
inEdit00: "Lo demás es un tema de permisos y no me he mirado con profundiad y no acabo de entender bien, la verdad. Tu dejalo igual y debería funcionar perfecto".
Visitante: "Bien, voy a probar!"
inEdit00 Piensa que tienes que hacer lo mismo con tu dominio "www.mipaginapersonal.com", eh?"
Visitante: "Haber, pone como sería la configuración..."
inEdit00: "Justo así"

$ sudo gedit /etc/apache2/sites-aviable/mipaginapersonal.com

<VirtualHost *:80>
ServerName www.mipaginapersonal.com
ServerAlias www.mipaginapersonal.com
DocumentRoot /var/www/mipaginapersonal.com

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

</VirtualHost>



[Puesta apunto]
Visitante: "Bien, he reiniciado el apache como me dijistes ( primero con reload y después con restart ) y no funciona!"
inEdit00: "Yaaaa, prisas! Tate un momento, todavía falta algo. Ejecuta lo siguiente:"
$ cd /etc/apache2/sites-aviable
$ sudo a2ensite mipaginapersonal.com
$ sudo a2ensite lawebdemicurro.com
$ sudo service apache2 reload"

[Final]
inEdit00: "Y ya debería funcionar! Ahora si entras en 'www.lawebdemicurro.com' debería salirte el mensaje:
Bienvenido a la web de mi curro!!!
inEdit00: "Y si entras en 'www.mipaginapersonal.com' te debería mostrar:
Bienvenido a mi página personal!!!

inEdit00: "Bueno, ahora solo hace falta que te copies tus paginas con todos sus directorios dentros de las carpetas correspondientes de '/var/www' y ya está."
Visitante: "Gracias! Es justo lo que quería!"

inEdit00: "Un último detalle! Es muy importante que tengas una entrada en el fichero /etc/hosts para cada domino, de otro modo, si intentas entrar en: 'http://www.mipaginapersonal.com' y no está en el fichero hosts, no se encontrará, y la irá a buscar por DNS a ver si está en Internet (que no está, y si está no es la tuya seguro), ok?"
inEdit00: Fíjate en esto, Si accedes a :"
http://localhost/index.html estás pidiendo /var/www
http://www.lawebdemicurro.com/index.html estás pidiendo /var/www/lawebdemicurro.com/index.html
http://index.html/lawebdemicurro/index.html estás pidiendo /var/www/lawebdemicurro.com/index.html

inEdit00: "Lo entiendes?"
Visitante: "Si, si, claro. Como localhost es el directorio raíz y dentro hay carpetas, yo puedo acceder desde las dos rutas! Pero si quiero acceder desde un ordenador remoto deberé poner la URL completa y no localhost, porque sinó no funcionaría, verdad"
inEdit00: "Exactamente! Ala , hasta la próxima!"



Nota: Recuerta, TÚ eres el visitante, si tienes dudas o necesitas ayuda, no dudes en dejar comentarios!

2 comentarios:

  1. como puedo hacer k configuraciones avansada cojan mi aplicaciones, de el contenido de todo los box

    ResponderEliminar
  2. Me sabe mal, @Victor, pero me temo que no entiendo tu pregunta. A que te refieres con "aplicaciones"? Y con el contenido de los "box"?

    Si acalar esto igual te pueda hechar un cable.

    Saludos!

    ResponderEliminar