Geek & Roll - Blog Archive » Hosts virtuales en Apache2 con Ubuntu

Hosts virtuales en Apache2 con Ubuntu

Cesar October 10th, 2008

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:

  1. 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.
  2. 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.
  3. 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 gedit /etc/apache2/sites-available/miapp1.local

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:

  1. <VirtualHost 127.0.0.1:80>
  2. 	ServerAdmin 	correo@miapp1.com
  3. 	ServerName	miapp1.local
  4. 	ServerAlias	miapp1.local
  5. 
    
  6. 	DocumentRoot	/home/cesar/webapps/miapp1/
  7. 	ErrorLog	/home/cesar/webapps/miapp1/logs/error.log
  8. </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

sudo gedit /etc/hosts

Va a tener algo como esto:

127.0.0.1 localhost
127.0.1.1 cesar-laptop

Agregamos una nueva entrada, así:

127.0.0.1 localhost
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:

sudo a2ensite miapp1.local

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:

sudo /etc/init.d/apache2 reload

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:

sudo a2enmod rewrite

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:

cat /var/log/apache2/error.log

11 Comentarios

boynas

October 11th, 2008

No mames, la traduccion al cristiano de este documento. Porque chingados no lo existia cuando lo necesiteeeeeeeee.

Muy buen rock!

Cesar

October 11th, 2008

¿Me imagino que con “este documento” quisiste poner un link y no salio?

Ah y gracias! :) uno hace lo que puede.

Rafyta

October 11th, 2008

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

October 12th, 2008

Yo al que no le entendí fué al Rafyta. Jo.

Useful material, master! Thnx.

Rafyta

October 12th, 2008

“Sudo porque necesitamos permisos de superusuario para…”

Cesar

October 12th, 2008

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

October 12th, 2008

Ok, ok, malisimo chiste, ya…

Axel

October 13th, 2008

Indeed.
Jejeje.

Rafyta

October 14th, 2008

Pos yo y mis amigos imaginarios ¡SÍ nos repimos fijate! Jajaja.

PaPito

October 27th, 2008

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.

Busca

Categorías

Meses