You are here: Home // Tecnología // Hosts virtuales con Apache2, o cómo tener varias páginas en un mismo servidor

Hosts virtuales con Apache2, o cómo tener varias páginas en un mismo servidor

Manuales para esto hay a cientos por la red, pero siempre me pasa lo mismo: soy muy despistado y a poco tiempo que haya pasado desde que hice algo, se me olvida :-/

Esta entrada es una especie de guía rápida para recordar como hacer las cosas, pero intentaré ponerlo lo más clarito posible para todos. Así que, si veis que necesita darle un repaso o añadir alguna cosa más que pueda ser de utilidad, no dejeis de avisarme ;-)

Instalando Apache2

Bueno, esto es relativamente simple pero no está de más recordarlo o poner una pequeña guía que sea útil a todos.

Vamos a partir de la necesidad de montar un wiki (como este). En este caso, es Dokuwiki. Como la gran mayoría de aplicaciones que usamos hoy día, dokuwiki utiliza PHP. Por tanto, vamos a aprovechar para instalar todos los paquetes juntos.

Abrimos una terminal, hacemos un sudo su para convertirnos en administradores del sistema, y hacemos un apt-get update para garantizar que tenemos los repositorios actualizados.

Seguidamente, instalaremos los paquetes de apache2, php, y alguna que otra dependencia necesaria mediante un apt-get install apache2 libapache2-mod-php5 php5-mysql

Dokuwiki no usa MySQL, pero si resultará necesario para otras cosas como un WordPress, un eGroupware u otra aplicaciones que queramos montar en un futuro.

Una vez instalado, seguimos con el paso siguiente.

Entendiendo Apache2, de forma sencilla

Apache2 es, quizás, más simple de configurar que las versiones anteriores por el hecho de contar con varios archivos de configuración en lugar de uno sólo.

Si hacemos un cd /etc/apache2, veremos que en ese directorio encontramos otro llamado “sites-available”. Dentro de él, encontraremos dos archivos de configuración: default y default-ssl

El primero de ellos configura el sitio por defecto que reside en /var/www para acceder por el puerto 80 (el de toda la vida), mientras que el segundo proporciona el acceso mediante web segura.

Estos archivos los usaremos como plantillas a la hora de crear sitios virtuales. No obstante, y dado que queremos alojar más de una web en el mismo servidor, vamos a modificar la instalación para tenerlo todo ordenado.

Ordenando las webs (opcional)

Primer paso. Vamos a crear un directorio dentro de /var/www que llamaremos default (por ejemplo). Para eso hacemos:

cd /var/www mkdir default chmod 777 default chown www-data:www-data default Con esto ya lo tenemos creado, y con todos sus privilegios

Luego haremos un mv /var/www/index.html /var/www/default/index.html, para colocar el archivo index.html de la página por defecto en su sitio. Ahora debemos editar el archivo default que se encuentra en /etc/apache2/sites-available

Pasaremos de esto:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride All
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

a esto otro:

<VirtualHost *:80>
        ServerAdmin alfonso@alfonsoarjona.net

        DocumentRoot /var/www/default
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/default>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride All
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Como podemos ver, la línea DocumentRoot /var/www del archivo original, la hemos pasado a DocumentRoot /var/www/default De igual forma <Directory /var/www/> ha pasado a <Directory /var/www/default>

Y finalmente ServerAdmin webmaster@localhost ahora es ServerAdmin alfonso@alfonsoarjona.net

Ahora hacemos un /etc/init.d/apache2 reload, y se aplicarán los cambios.

Creando un host virtual

Vamos a ver como se hace para este dominio.

Creamos un directorio dentro de /var/www que llamaremos wiki.alfonsoarjona.net. Para eso hacemos:

cd /var/www mkdir wiki.alfonsoarjona.net chmod 777 wiki.alfonsoarjona.net chown www-data:www-data wiki.alfonsoarjona.net

Con esto ya lo tenemos creado, y con todos sus privilegios

Ahora viene lo sencillo, que es copiar default a otro archivo. Para que sea claro, haremos esto:

cd /etc/apache2/sites-available cp default wiki.alfonsoarjona.net

Y ahora editaremos wiki.alfonsoarjona.net, para dejarlo de esta forma:

<VirtualHost *:80>
        ServerAdmin alfonso.arjona@alfonsoarjona.net
        ServerName wiki.alfonsoarjona.net

        DocumentRoot /var/www/wiki.alfonsoarjona.net
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/wiki.alfonsoarjona.net>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/wiki-error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/wiki-access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Las líneas que hemos cambiado son:

  • ServerAdmin alfonso.arjona@alfonsoarjona.net
  • ServerName wiki.alfonsoarjona.net (esta la hemos añadido)
  • DocumentRoot /var/www/wiki.alfonsoarjona.net
  • <Directory /var/www/wiki.alfonsoarjona.net>
  • ErrorLog /var/log/apache2/wiki-error.log
  • CustomLog /var/log/apache2/wiki-access.log combined

La primera tiene mi dirección de correo, para enviar reportes y avisos. La segunda el nombre del host virtual La tercera, el lugar donde estarán los documentos html/php o lo que sea de nuestra web La cuarta, define los privilegios de acceso del directorio donde está la web La quinta, me genera un log que contiene exclusivamente los errores de la wiki Y la sexta, genera un log con los accesos de la wiki, y sólo de la wiki.

Bien, ahora el paso final. Debemos hacer que apache empiece a trabajar con ese host virtual. Para eso hacemos un a2ensite wiki.alfonsoarjona.net, y después un /etc/init.d/apache2 reload.

¡Listo! Ya tenemos nuestro host virtual funcionando.

Tags: , , , ,

Leave a Reply

Copyright © 2012 Alfonso Arjona. Some rights reserved.