Configurar un multihost con apache2 y en Debian/ubuntu [ACTUALIZADO]

Introducción

Como desarrollador Web en alguna ocasión he tenido que realizar algún proyecto sin disponibilidad de tener un servidor de desarrollo. Hasta este punto, existen tres opciones si queremos trabajar con un servidor de desarrollo en lugar de usar un WAMP o un XAMPP (que son cómodos pero poco profesionales).

  • Contratar un multihost a algún proveedor de servicios de hosting
  • Instalar una máquina servidor configurandola con multihost y su propio DNS, etc.
  • Instalar un servidor LAMP con multihost en el equipo de trabajo

En esta entrada me voy a decantar por esta última opción por comodidad y rapidez. Pero hay que tener en cuenta que esta solución sólo servirá para tener un entorno multihost para uno mismo, si se trabaja en grupo en un red no será un sistema válido.

Instalando apache2, php5, mysql5 … (lamp)

Lo primero, es instalar un sistema LAMP (Linux, Apache, Mysql, PHP). Esto en un sistema Debian/Ubuntu es tan sencillo cómo ejecutar en consola:

$ sudo apt-get install apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libaprutil1-dbd-sqlite3 libaprutil1-ldap libhtml-template-perl mysql-server mysql-server-5.5 mysql-server-core-5.5 apache2-mpm-prefork libapache2-mod-php5 libtidy-0.99-0 php5 php5-cli php5-common php5-curl php5-gd php5-mysql php5-odbc php5-sqlite php5-tidy php5-xdebug php5-xmlrpc libapache2-mod-auth-mysql libphp-jpgraph dbconfig-common libmcrypt4 php-doc php5-mcrypt phpmyadmin

A continuación, como sana costumbre recomiendo cambiar la clave de root de MySQL.

mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourpassword');

Y por último, si hemos instalado PHP, editar el fichero /etc/php5/apache2/php.ini y habilitar el uso de mysql, en la línea:

;extension=mysql.so

Cambiadla por: 

1extension=mysql.so

Un poco de DNS

Apache2 se configura de modo que se le indica al servidor en que interfaces de red y puertos debe funcionar. Tomemos la imagen siguiente:

Disponemos de varios nombres de dominio (reales o ficticios) y deseamos que apunten a la misma máquina, pero claro, no queremos que apache nos facilite las mismas Webs para cada uno, sino que sean proyectos diferentes (multihost), para ello debemos indicar el sistema DNS que esos nombres apuntan a la IP del servidor de trabajo.

Si estuviéramos en un entorno real y profesional, tendríamos un servidor DNS y un servidor LAMP dedicado con una IP W.X.Y.Z, e indicaríamos al servidor DNS que cada dominio apunte al servidor con IP W.X.Y.Z. Como estamos probando en un servidor “monopuesto” no necesitamos configurar ningún servidor DNS, sólo debemos editar el fichero /etc/hosts. Este fichero es una reminiscencia del origen de Internet y contiene parejas del tipo (nombre, ip).

De modo que si queremos añadir el dominio de prueba “midominio”, sólo debemos añadir al final del fichero /etc/hosts la sighuiente línea:

127.0.0.1    midominio

Una vez hecho esto, nuestro equipo sabe que la IP del dominio midominio es 127.0.0.1. Pero, sólo nuestro equipo, este fichero es local al equipo dónde lo hemos editado de ahí que este sistema sólo nos sirva para el equipo de trabajo no para trabajar en equipo.

Sistema multihost en apache2

Y por fin, vamos a ver los pasos para configurar un sistema multihost en nuestro apache2. Supongamos que los DocumentRoot de los diferentes dominios estan en la carpeta /home/usuario/www, debemos seguir estos pasos:

  1. Añadir el usuario al grupo WWW-DATA de apache2: Para que apache pueda leer/escribir sin problemas en sus carpetas (Cambiad USUARIO por vuestro usuario)
    $ sudo usermod -G www-data USUARIO
  2. Poner los permisos 775 para directorios y 664 para ficheros: Por lo mismo que en el apartado anterior ($PWD se evalúa como el directorio actual, se puede indicar el directorio correspondiente).
    $ find $PWD -type d -print -exec chmod 775 {} \;
    $ find $PWD -type f -print -exec chmod 664 {} \;
  3. Cambiar los permisos del directorio del vhost:
    $ sudo chown -R USUARIO:www-data *
  4. Edita el fichero del virtual host:
    
    <VirtualHost *:80>
    	ServerAdmin	info@miemail.com
    	Servername	midominio
    	DocumentRoot	/home/usuario/www/midominio
    	LogLevel	warn
    	ErrorLog 	${APACHE_LOG_DIR}/midominio_error.log
    	CustomLog	${APACHE_LOG_DIR}/midominio_access.log combined
    	<Directory />
    		Options FollowSymLinks
    		AllowOverride None
    	</Directory>
    	<Directory /home/usuario/www/midominio>
    		Options Indexes FollowSymLinks MultiViews
    		AllowOverride All
    		Order allow,deny
    		allow from all
    	</Directory>
    </VirtualHost>

    Debemos tener cuidado con lo siguiente, en Debian/Ubuntu la configuración inicial de apache2 desactiva el uso del fichero .htaccess. Para habilitarlo debemos ser cuidadods de poner la directiva AllowOverride All como en el ejemplo anterior.

    Novedad: En versiones recientes de apache está configuración puede no ser suficiente y debemos añadir alguna directiva adicional, para no encontrartos un error HTTP 403 Forbbiden. De modo que en la configuración del directorio con el DOCUMENT ROOT debemos a Require all granted, quedando algo así

    :

    <Directory "your directory here">
       Order allow,deny
       Allow from all
       # New directive needed in Apache 2.4.3: 
       Require all granted
    
    

    Tal y como podemos leer en Stack Overflow.

  5. Activar el mod_rewrite:
    $ sudo a2enmod rewrite
    $ sudo service apache2 restart
  6. Accede a http://midominio

Suerte con vuestros servidores LAMP!

Referencias

  1. DNS en Wikipedia: http://en.wikipedia.org/wiki/Domain_Name_System
  2. Virtual Host: http://httpd.apache.org/docs/2.2/vhosts/
  3. Ejemplos: http://httpd.apache.org/docs/2.2/vhosts/examples.html

2 thoughts on “Configurar un multihost con apache2 y en Debian/ubuntu [ACTUALIZADO]

  1. Hola! Gracias por el tutorial. Tengo un par de dudas, a ver si me puedes ayudar:
    1. En el punto 3, donde dices ‘Cambiar los permisos del directorio del vhost’, ¿da igual dónde esté ese directorio? ¿Es un directorio que debo crear o debo usar alguno en concreto? ¿/etc/apache2/sites-available? ¿Y el archivo del virtual host, debe acabar en .conf?
    2. Y, una vez creado el archivo del virtual host, ¿debemos habilitarlo con ‘a2ensite mivhost.conf’?
    He estado echando un ojo al manual de Apache, pero me cuesta encontrarlo. De todas maneras seguiré investigando, pero si me guias un poco estaría muy agradecido.

    • Hola, en respuesta a tus preguntas:

      1- El directorio da igual donde esté. Sólo importa que la ruta este bien puesta en fichero de apache y que los caracteres especiales estén escapados. También es importante que apache tenga permiso de lectura tanto en el directorio como para acceder a esa ruta.

      2- Habilitar el vhost depende del sistema operativo y versión de apache. No se hace igual en XAMPP, que en WAMP, que en un apache2 genérico en un debian. Si usas debian/ubuntu seguramente sea ‘a2ensite mivhost’ sin el conf. Te aconsejo que mires en google como funciona tu versión.

      PS: Perdona que haya tardado en responder.
      PS2: Por Google si pones Apache Virtual Host on Ubuntu podrás encontrar mucha mucha información y opciones. Suerte!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

This site uses Akismet to reduce spam. Learn how your comment data is processed.