Hosts virtuales en Apache2 con Ubuntu
Entonces, dices que quieres ponerte a desarrollar la siguiente gran aplicación Web 2.0 que revolucionará al mundo. Tienes las ganas, la idea y el conocimiento, ahora solo necesitas un ambiente de desarrollo adecuado. Antes de que corras por un teclado ergonómico, una silla cómoda, mouse inalámbrico y cualquier otra cosa que te ayude a programar de manera más cómoda, no me refería a eso con ambiente de desarrollo.
Lo que vamos a hacer ahora es configurar hosts virtuales con tu servidor Apache2 que ya instalaste en tu workstation. La razón es que, si eres como yo, tienes varios sitios en desarrollo al mismo tiempo y quieres que cada uno tenga su propia configuración y no usar URLs como localhost/miapp1 y localhost/miapp2.
Básicamente es editar algunos archivos, hacer vínculos simbólicos por aquí y por allá… nada complicado. Primero definamos algunas cosas:
- Vamos a suponer que el directorio raíz de la aplicación Web es /home/cesar/webapps/miapp1. Puede ser cualquier otro directorio siempre y cuando Apache pueda leer el directorio.
- Queremos que en vez de usar algo como http://localhost/webapps/miapp1 usar http://miapp1.local/ Ya se que es estúpido usar el directorio home de un usuario como raíz de Apache, así que no lo hagan en un servidor real.
- Queremos hacerlo a las de ya.
Primero tenemos que editar un archivo. El nombre no importa mucho, pero el lugar donde va guardado si. Para crearlo usamos:
Sudo porque necesitamos permisos de superusuario para escribir a ese directorio. El directorio sites-available tiene archivos de configuración para los sitios disponibles en Apache2. Hay una diferencia entre disponibles y habilitados: puedes tener varios sitios disponibles pero mientras no estén habilitados estos no pueden ser accedidos por medio Apache2.
En el archivo vamos a poner lo siguiente:
-
<VirtualHost 127.0.0.1:80>
-
ServerAdmin correo@miapp1.com
-
ServerName miapp1.local
-
ServerAlias miapp1.local
-
-
DocumentRoot /home/cesar/webapps/miapp1/
-
ErrorLog /home/cesar/webapps/miapp1/logs/error.log
-
</VirtualHost>
En donde dice VirtualHost 127.0.0.1:80 ese es el IP para la interfaz loop, es tu propia computadora (ahora ya entiendes el chiste de no hay lugar como 127.0.0.1). El :80 es el puerto por defecto que se usa cuando no le pones nada a la dirección. ServerAdmin básicamente puede ser cualquier correo, es lo que sale cuando hay un error 500 (interno) y Apache2 manda un aviso que te puedes contactar con [ServerAdmin] para notificarle del error. Lo importante es ServerName y ServerAlias, ya que es el nombre que se va a usar para el host virtual, lo que vamos a poner en la barra de direcciones. ServerAlias es básicamente otro nombre para dar con el mismo host, como podría ser http://www.miapp1.com y http://miapp1.com. En este caso lo dejamos igual.
DocumentRoot es la raíz de miapp1. Es crítico que Apache2 pueda leer el contenido del directorio. Por último ErrorLog nos servirá para diagnosticar cualquier problema al arrancar el servidor, y Apache2 debe poder ESCRIBIR a ese directorio, ya que si no puede no va a arrancar (yo lo aprendí por las malas). Asegúrense de que el directorio exista antes de arrancar el servidor.
Ahora si ponemos en la barra de direcciones del navegador ‘miapp1.local’ va a tratar de resolver esa dirección mediante DNS, o sea en pocas palabras cree que es una dirección disponible públicamente en la Web y ¡obvio que no lo es! así que tenemos que decirle que se olvide de buscarla en otro sitio y se limite a buscarla en nuestra computadora. Para eso editamos el archivo /etc/hosts
Va a tener algo como esto:
127.0.1.1 cesar-laptop
Agregamos una nueva entrada, así:
127.0.1.1 cesar-laptop
127.0.0.1 miapp1.local
Le estamos diciendo “checa computadora, cuando veas que alguien se refiere a miapp1.local ni te molestes en buscarlo en otra parte, su dirección IP es 127.0.0.1 o sea, tu misma”.
Ahora habilitamos el sitio:
La herramienta a2ensite nos crea el vínculo simbólico necesario en vez de tenerlo que hacer manualmente nosotros, y hasta nos pide que recarguemos Apache2 con lo siguiente:
En este momento si ponemos miapp1.local en la barra de direcciones de nuestro navegador debe de mostrarnos el sitio.
¿Y si algo sale mal?
El primer lugar para buscar información es el log de error que configuramos. Ahí podremos encontrar pistas para ver qué es lo que salió mal y corregirlo. Muchas aplicaciones y frameworks (como Wordpress y CodeIgniter) usan mod_rewrite para que las URLs sean amigables (http://www.miapp1.com/ver/perfil/juanita en vez de http://www.miapp1.com/perfiles.php?user=juanita) y si no lo tenemos habilitado Apache2 nos dará un error. Para habilitar un módulo:
La herramienta a2enmod habilita un módulo que se encuentre disponible (pero no habilitado). En este caso rewrite.
Si nada de esto parece resolver el error, pueden ver el contenido de /var/log/apache2/error.log para ver que salió mal:



11 Comentarios
boynas
No mames, la traduccion al cristiano de este documento. Porque chingados no lo existia cuando lo necesiteeeeeeeee.
Muy buen rock!
Cesar
¿Me imagino que con “este documento” quisiste poner un link y no salio?
Ah y gracias! :) uno hace lo que puede.
Rafyta
A ver, a ver, yo no se usar linux ni nada, no te entiendo porque sudas tanto compa ¿se te acabó la cheve o que onda?
Axel
Yo al que no le entendí fué al Rafyta. Jo.
Useful material, master! Thnx.
Rafyta
“Sudo porque necesitamos permisos de superusuario para…”
Cesar
Por el uso de sudo esto, sudo lo otro… para todo se necesita sudo. Entonces como “sudo” mucho, al parecer se me acabó la cheve.
Rafyta
Ok, ok, malisimo chiste, ya…
Axel
Indeed.
Jejeje.
Rafyta
Pos yo y mis amigos imaginarios ¡SÍ nos repimos fijate! Jajaja.
[...] - Hosts virtuales en Apache2 con Ubuntu saved by uolter2008-10-17 - algunas direcciones sobre innovación saved by viimmy2008-10-16 - IPv6 [...]
PaPito
si ubierais puesto sudo SU os ubierais aorrado tener k poner tanto sudo por aki i tanto sudo por alli
Haz un comentario:
Es necesario que dejes tu nombre y correo electrónico (no se publicarán).
Si dejas un comentario anónimo, con insultos o ajeno al tema, iremos hasta tu casa y le diremos a tu mamá la cantidad de porno que hay en tu computadora. Si, lo sabemos.