Como hacer un virtual hosting en red con Apache y Bind en Ubuntu.

O concretamente un verdadero servidor web con sus múltiples sitios pero en red local. Realmente lo que se va a hacer aca es crear un servidor web con dominios, aunque solo sea en una red local funciona de la misma manera que los dominios en internet. Y como lo vamos a lograr?  En mi caso lo he hecho con una máquina virtual usando un virtual box e instalando el Ubuntu server en ella, aunque esto es válido para cualquier Ubuntu o Linux, no necesariamente tiene que estar en una máquina virtual.

Para aquel que no sepa lo que es el virtual hosting es que podamos crear “varios sitios web” en el mismo servidor. Es decir que si eres desarrollador y estás trabajando con dos o más sites a la vez que no tengas que andar modificando el archivo de configuración de apache cada vez que cambias de uno a otro.

Por ejemplo si estas con dos proyectos: proyecto1.local y proyecto2.local. Lo ideal sería que puedas acceder a los dos sin tener que cambiar nada en los archivos de configuración, tecleando en el navegador o una dirección o la otra. Se pueden crear tantos como se quieran simplemente modificando los archivos de configuración de apache.

Hasta ahora todo claro pero hay un problema: solo sirve para trabajar en local, en el propio equipos no puedes accerder a los sitios virtuales que tengas en tu equipo desde la red local, por lo que si estás trabajando con más compañeros esta opción no es del todo adecuada. La solución es simple: instalar un servidor dns, suena re jodido pero la verdad es que es bastante simple. Esto se logra con el programa bind.

Resumiendo : necesitamos un Linux donde instalaremos nuestro server con

  • Apache
  • Php
  • Bind

Los cuales instalaremos logueando como root con

  •  apt-get update
  •  apt-get install apache2
  •  apt-get install bind9
  •  apt-get install php5

Configuración de Apache

Primero crearemos los virtual hostings con apache. Ojo acá hay 2 formas que depende de que es lo que tengas instalado en tu equipo. Si tienes xampp lo explicaré otro dia, pero si tienes todo instalado manualmente digamos, el apache2, el php, el mysql y tal es de la siguiente manera:

Nos vamos a la carpeta de apache2 con cd /etc/apache2 si tiramos un ls vemos que hay dos carpetas  sites-availables y sites-enabled . En la primera meteremos un archivo de configuración por cada site que creemos y en la segunda un enlace simbólico al archivo que acabamos de crear. Pero antes de poder crear estos archivos necesitamos decirle al archivo de configuración de apache que vamos a hacer esto, es decir que tiene que leer los archivos en dicha carpeta. Para ello hacemos sudo nano /etc/apache2/apache.conf y miramos si la directiva Include sites-enabled esta activada, es decir tal cual la acabo de escribir sin que este comentada con el operador # o ; al inicio de la misma. En caso que no esté pues agregamos la línea o descomentamos

Ahora creamos un archivo de configuración para el sitio en sites-availables y le metemos

<VirtualHost *:80>
        ServerAdmin email@misitioweb.local
        ServerName misitioweb.local
        DirectoryIndex index.php
        DocumentRoot /var/www/misitioweb
        <Directory "/var/www/misitioweb">
                Options indexes FollowSymLinks
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

El nombre del archivo conviene que se llame misitioweb.local, ya que usaremos la coletilla .local para los sitios que creemos en local. Servername es el nombre del site, luego docuementRoot es donde va a estar nuestro archivo index.php y estos valores son los que tienes que cambiar con los parámetros de tu sitio.

Una vez creado el sites-available/ misitioweb.local hay que hacer un enlace simbólico desde sites-enabled a este fichero. Para ello nos vamos a /etc/apache2/sites-enabled y ejecutamos un sudo ln -s /etc/apache2/sites-available/misitioweb.local misitioweb.local.

Los mods de apache funcionan similarmente, agregamos un enlace simbólico desde mods-enabled a mods-availables. Para estos casos es necesario que mod-rewrite este activado.

Lo siguiente es crear la carpeta en la dirección especificada con un index.php cuyo interior puede tener <? echo ‘hola mundo’; ?> por ejemplo. Este será el archivo que buscara apache cuando hagamos la petición del sitio.

Configuración de Bind

Si ya tienes los virtual hostings configurados con apache, lo que sigue es igual tanto como si tienes xampp o apache y php por separado.

Si vamos a la carpeta donde está instalado cd /etc/bind9 y tiramos un ls vemos un montón de archivos que comienzan con db.algo, estos son zonas por defecto, es decir “sites”. Nosotros crearemos una carpeta llamada hostedzones donde meteremos todos los sites que sea menester. Es decir crearemos un archivo db.misitio por cada sitio que creemos. También veremos un archivo llamado named.conf y named.conf.local. Miramos en named.conf si está incluido el named.conf.local si no es así lo incluimos agregando la línea include “/etc/bind/named.conf.local”

En el archivo named.conf.local es donde vamos a trabajar nosotros y es donde agregaremos las líneas:

zone misitioweb.local{
	type master;
    file "/etc/bind/hostedzones/db.misitioweb.local";
};

En este caso está diciendo que la zona “misitioweb.local” está en el fichero de configuración file “/etc/bind/hostedzones/db.misitioweb.local”;

Bien ahora creamos el fichero de configuración de la zona, que es la que acabamos de especificar. Para ello vamos a /etc/bind9/hostedzones y creamos el fichero db.misitioweb.local con la siguiente configuración:

$TTL	604800
@	IN	SOA	misitioweb.local. email.misitioweb.local. (
			 16062013     	; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@		IN	NS 	misitioweb.local.
@		IN	MX 0	email.misitioweb.local.
localhost	IN	A	127.0.0.1
misitioweb IN	A	192.168.0.10

Estos son casi siempre igual, lo único que hay que tener en cuenta es cambiar el nombre del sitio cada vez que creamos uno. También es recomendable usar serials diferentes por cada sitio. Obviamente al final se ve la dirección ip del servidor, nuestro Ubuntu que deberá ser la que corresponda al tuyo. Asi se configura una red en ubuntu por consola

Debemos agregar en los pcs clientes la dirección del server dns. Si estas en windows se hace agregando al archivo C:\Windows\System32\drivers\etc\hosts la linea con el nombre del sitio seguido de la ip: por ejemplo misitio.local 192.168.0.xxx. Si estas en linux este archivo es /etc/resolv.conf y agregas la linea de igual manera que en windows.

Recordá que cada vez que metas un nuevo site tenes que hacer esos dos pasos que te acabo de describir:

  • crear el archivo /etc/bind/hostedzones/db.misitioweb.local
  • especificar el archivo creado en el archvo /etc/bind/named.conf.local

Luego reiniciamos bind con sudo service bind9 restart y apache con service apache2 restart y con eso deberia estar funcionando por lo que si tecleamos en el navegador http://misitio.local deberiamos ver el sitio.

Enlaces interesantes con la configuración de ubuntu server

Anuncios

14 pensamientos en “Como hacer un virtual hosting en red con Apache y Bind en Ubuntu.

  1. Pingback: Configurar resolución gráfica en Ubuntu Server 12.04 | jcsis

  2. Pingback: Copias de seguridad en Ubuntu Server | jcsis

  3. Pingback: Copia seguridad mysql a través de consola | jcsis

  4. Pingback: Instalar jvm en ubuntu 11.04 | jcsis

  5. Pingback: Configurar red ubuntu 11.04 | jcsis

  6. Pingback: Notas sobre el ubuntu server 10.04 | jcsis

      • lo que pasa es que en centos y red hat no existe esa carpeta de apache2 en su lugar esta una que se llama httpd y tampoco existen los archivos sites-enabled ni sites-availale tampoco existe la directiva sites-enabled ni comentada ni descomentada ni ningun archivo apache.conf deberia haber alguna manerade adaptar este metodo a este sistema o si existe otra metodologia

      • Ahh ok tu tienes un xampp o algo similar. Para hacer un virtual hosting en local: Tienes que tener una carpeta llamada conf dentro de apache, y luego una que se llama extra. Ahi dentro veras un archivo que se llama httpd-vhosts. En este archivo metes todos los virtual host que quieras. Luego para probar que te funciona en local puedes agregar a tu archivo /etc/host la direccion 127.0.0.1 y el nombre de un host virtual.
        La diferencia con mi tutorial es que creas un archivo por cada virtual host y luego un enlace a dicho archivo, pero solo es valido para lamp que es el paquete que te instala ubuntu y no se las demas distribuciones. Ahora no se como será para especificar los virtual hosts a los dinttos zones que tienes. El metodo de virtual hosting que te estoy explicando ahora vale para local y debería valer para la red, pero no se como se podriá especificar al bind, es decir por logica seria que cada zona apunte a tu archivo httpd-vhosts porque es ahi donde estan tus host, que a diferencia del tutorial cada host virtual tenia un archivo por zone. Aca sera el mismo archivo para todas las zones se entiende?

  7. BUenas amigos necesito que me expliqquen algo ueme tiene mal, elcaso es k tengo una red local con un sitio en wordpress con xampp, pero para que salga en ordenadores o en telefonos debo introducir el IP de ordenador, ejem> http://192.168.0.10/webaguanos,
    Pues yo quiciera que solo introduscamos http://www.webaguano.cu, esto es un ejemplo,pudiera ser cualquier máscara que ocultra el IP. Muchas grasias espero respuesta..

  8. Buenas tienes que crear virtual hosting con xampp, creo que era el archivo \xampp\apache\conf\extra\httpd-vhosts.conf. Además tienes que o bien tener un servidor dns o lo puedes simular con el archivo C:\Windows\System32\drivers\etc\hosts de cada pc que se va a conectar al sitio. Básicamente le agregas la ip seguido del nombre del servername que definiste en el archivo de virtual host de apache por ejemplo: 192.168.0.10 http://www.webaguano.cu,
    Tu arichivo de httpd-vhosts.conf. tendria una entrada como esta

    ServerAdmin email@misitioweb.local
    ServerName http://www.webaguano.cul
    ServerAlias webaguano.cu
    DirectoryIndex index.php
    DocumentRoot /var/www/misitioweb

    Options indexes FollowSymLinks
    Order allow,deny
    Allow from all

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s