Cómo tener varios sitios web en el mismo servidor web Apache. Usaremos VirtualHost de Apache. Como sistema operativo usaremos Linux Ubuntu 12.04. Aunque lo explicado en este artículo sirve para otras versiones de Ubuntu y para otras distribuciones de Linux.
- Definición VirtualHost de Apache.
- Requisitos para tener varios sitios web en un mismo servidor Apache en Linux.
- Ficheros de configuración de Apache en Linux.
- Configurar Apache para permitir varios sitios web en un mismo servidor Linux Ubuntu.
- Probar sitio web virtual host en equipo de la misma LAN.
Definición VirtualHost de Apache
La tecnología Virtual Host de Apache sirve para poder publicar más de un sitio web en un mismo servidor web con Apache. Incluso podremos aplicar diferentes configuraciones a cada sitio web (host virtual).
Cuando se realiza una petición al servidor web, Apache identificará a qué site (host virtual) ha de asignarla. Apache puede identificar el sitio web de destino en el servidor (site) en base a tres posibles factores: IP, host name (nombre del sitio) o bien por el puerto.
En este tutorial usaremos el método host name, dado que realizaremos la configuración para dos sitios web reales: comunidadbiker.com y electrojj.com. En el hosting donde tenemos registrados los dominios, estableceremos las zonas DNS apuntando a la IP pública donde esté ubicado nuestro servidor web, tal como indicamos aquí.
Requisitos para tener varios sitios web en un mismo servidor Apache en Linux
Servidor web con Apache en Linux
En primer lugar necesitaremos disponer de un servidor con Linux y Apache. En nuestro sitio web tenemos numerosos artículos explicando cómo montar un servidor web Apache en Linux. Alguno de ellos:
- Instalar Apache PHP MySQL (MariaDB) en Linux CentOS 7 Minimal.
- Montar servidor web Apache y servidor MySQL con Linux CentOS 7 Minimal.
- Instalar Linux Ubuntu Server 13.04 servidor web con Tomcat, Apache, PHP y MySQL.
- Servidor web con Ubuntu Server 12 y LAMP Server Apache PHP MySQL.
Por supuesto necesitaremos acceso al servidor web Linux con un usuario con permisos suficientes para acceder a las carpetas de configuración de Apache y de los sitios web.
Configurar zonas DNS en hosting de dominio para sitios web reales
En nuestro caso montaremos dos sitios web reales y públicos, por ello deberemos configurar, en nuestro panel de control del dominio (de nuestro hosting), las zonas DNS. Si vamos a montar el servidor web con sitios reales de acceso público deberemos tener acceso al panel de control del hosting donde tengamos registrado el dominio.
Deberemos conocer la dirección IP pública de la ubicación del servidor web Apache. Será la que añadamos en las zonas DNS del dominio. Para obtener la IP pública podemos acceder a la gestión del router de nuestra red, y en Información y diagnóstico suele aparecer esta IP pública:
La IP pública debe ser estática, si es dinámica y varía, como es lógico, tendremos que ir cambiándola en la zona DNS cada vez que varíe. O bien usar alguna utilidad de nuestro hosting que admita cambiar la IP en la zona DNS cada vez que cambie en nuestra ubicación.
Desde el panel de control del dominio, en Zonas DNS, añadiremos una zona de tipo A, con host «www», con la IP obtenida en el paso anterior:
Este proceso lo realizaremos cuando queramos que los sitios web sean accesibles públicamente. Mientras estamos en modo depuración y desarrollo del sitio no es recomendable hacerlas públicas, mejor esperar a que estén al 100% operativas.
Repetiríamos el proceso anterior para cada web que queramos hacer pública, siempre con la misma IP pública, ya que todos los sitios web irán redireccionados a la misma IP pública, al mismo servidor.
NAT en router o cortafuegos de la organización
Con la zona DNS anterior conseguiremos que todo el tráfico http de cada sitio web vaya hacia la IP pública indicada. Ahora lo que haremos será, ya en la infraestructura de red de la organización/empres/casa, será hacer un NAT (una traslación de direcciones, un mapeo de puertos o una redirección de puertos), de forma que todo el tráfico que llegue al router o cortafuegos que tengamos, vaya encaminado a una IP, que será la IP de nuestro servidor web Apache con Linux Ubuntu. Por ello, antes de hacer el NAT, debemos conocer la IP de la LAN del servidor de Ubuntu, podemos obtenerla con el comando:
1 |
ifconfig |
En nuestro caso la 192.168.1.6:
Crearemos una regla en el router o cortafuegos, en la sección NAT, que redirija todo el tráfico http (puerto 80) a la IP del servidor web Apache:
Ubicación de los ficheros de los sitios web en el servidor
Cada sitio web de nuestro servidor tendrá una carpeta asignada. Habitualmente suelen colocarse en:
/var/www
Aunque, como es lógico, pueden ponerse en cualquier ubicación.
Por lo tanto, para cada sitio web, tendremos una carpeta dentro de /var/www, por ejemplo:
Ficheros de configuración de Apache en Linux
Antes de realizar cambios, indicamos de forma resumida dónde están los ficheros de configuración de Apache, habitualmente se encuentran en la carpeta:
/var/apache2
o bien en esta otra carpeta:
/etc/apache2
Dependerá de la distribución de Linux y de la versión de Apache que tengamos instalada.
El fichero de configuración principal de Apache es: apache2.conf en las versiones nuevas de Apache, en las anteriores era httpd.conf.
Por lo tanto, la configuración principal de Apache, para una distribución Linux Ubuntu, se encuentra en:
/etc/apache2/apache2.conf
Este fichero tendrá una línea indicando que se incluyan los ficheros ubicados /etc/apache2/sites-enabled:
Include sites-enabled/
Los archivos de configuración para los virtual hosts, que serán los que modifiquemos o creemos nuevos, se encuentran dentro de dos carpetas:
- /etc/apache2/sites-available: aquí se ubicarán todos los archivos de configuración de los host virtuales, cada host se corresponderá con un archivo.
- /etc/apache2/sites-enabled: aquí se ubicarán los enlaces simbólicos a los archivos de la carpeta anterior, sites-available, para los host que queramos activar en cada momento.
Con la instalación de Apache, en una distribución Linux Ubuntu, se crean por defecto el archivo /etc/apache2/sites-available/000-default (en algunas versiones /etc/apache2/sites-available/default) y su correspondiente enlace simbólico /etc/apache2/sites-enabled/000-default (o bien /etc/apache2/sites-enabled/default). Estos dos ficheros nos servirán de ejemplo para montar posteriormente nuestra estructura para los dos sitios web que alojaremos en el mismo servidor Apache.
El contenido del fichero de ejemplo por defecto de virtual host de Apache2 en Linux Ubuntu /etc/apache2/sites-enabled/000-default es:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName localhost ServerAlias localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> 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 ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/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> |
Configurar Apache para permitir varios sitios web en un mismo servidor Linux Ubuntu
Crearemos cada ficheros de configuración de cada sitio web. Para ello abriremos una ventana de terminal de línea de comandos en nuestro equipo Linux Ubuntu. Podremos usar el fichero que suele venir por defecto, como base, que suele estar en:
/etc/apache2/sites-available
Por ello accederemos a esta carpeta con el comando:
1 |
cd /etc/apache2/sites-available/ |
Y suele tener el nombre default o 000-default.conf (según la versión de Apache y la distribución de Linux). Haremos una copia de este fichero en el fichero resultante para nuestro sitio web. En nuestro caso, para el sitio web «comunidadbiker.com», ejecutaremos:
1 |
cp default comunidadbiker.com.conf |
Editaremos el fichero creado comunidadbiker.com.conf con:
1 |
nano comunidadbiker.com.conf |
Y modificaremos ServerName y ServerAlias por la página web que queramos redireccionar, en nuestro caso «comunidadbiker.com» y «www.comunidadbiker.com» respectivamente. También modificaremos las líneas que hagan referencia a la carpeta /var/www por la carpeta donde tengamos los ficheros de nuestro sitio web, en nuestro caso /var/www/comunidadbiker:
El fichero configurado para el sitio comunidadbiker.com (con carpeta /var/www/comunidadbiker) y para el puerto 80, quedará:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName comunidadbiker.com ServerAlias www.comunidadbiker.com DocumentRoot /var/www/comunidadbiker <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/comunidadbiker> 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 ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/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> |
El fichero anterior es un ejemplo para un sitio web con acceso por el puerto estándar 80. Podremos modificarlo para establecer la configuración personalizada para el sitio web que estamos configurando.
Guardaremos los cambios pulsando en «Control + O» y cerraremos la edición pulsando en «Control + W».
Una vez creado el fichero en la carpeta /etc/apache2/sites-available , para activarlo, deberemos crear un enlace simbólico a este fichero en /etc/apache2/sites-enable, para ello podremos ejecutar el siguiente comando:
1 |
a2ensite comunidadbiker.com.conf |
Que nos devolverá el mensaje:
Enabling site comunidadbiker.com.conf.
To activate the new configuration, you need to run: service apache2 reload
En caso de no disponer del comando «a2ensite», podremos crear el enlace simbólico manualmente con:
1 |
ln -s /etc/apache2/sites-available/comunidadbiker.com.conf /etc/apache2/sites-enabled/ |
Tal y como indica, para aplicar los cambios, deberemos reiniciar el servicio de Apache, que podemos hacerlo con el comando
1 |
service apache2 reload |
En la carpeta /etc/apache2/sites-enable nos habrá creado el enlace simbólico:
Si hemos realizado la configuración correcta, navegando al sitio web comunidadbiker.com desde fuera de nuestra red (desde Internet), se redireccionará a la IP pública donde tengamos el servidor, pasará al router/firewall y éste realizará el NAT a la IP local del servidor. El servidor Apache recogerá la petición y según el dominio con el que viene, usará el fichero correspondiente de /etc/apache2/sites-available para abrir el sitio web asignado.
De esta forma podremos tener varios sitios web alojados en un mismo servidor y en una misma red LAN.
Repetiremos el proceso para el resto de sitios web que queramos alojar en este servidor, agregando nuevos ficheros en /etc/apache2/sites-available.
Probar sitio web virtual host en equipo de la misma LAN
Para acceder al sitio web y realizar las pruebas oportunas, si estamos en un equipo de la misma red LAN que la del servidor Apache, deberemos establecer de forma manual las DNS para este sitio web. En equipos Windows, editaremos con el notepad (bloc de notas) el fichero:
C:\Windows\System32\drivers\etc\hosts
Añadiremos una línea al fichero, por ejemplo:
192.168.1.6 comunidadbiker.com
Siendo 192.168.1.6 la IP del servidor Apache con el VirtualHost y siendo comunidadbiker.com el sitio web que queramos probar del servidor Apache. Añadiremos tantas líneas como sitios web tengamos en dicho servidor.
Guardaremos los cambios (en Windows 10 y Windows 11 pedirá acceder a este fichero con privilegios de administrador)
De esta forma, al acceder al sitio web desde el equipo cliente, usará la IP del servidor Apache y pasará el nombre del dominio para que el virtual host lo sirva.
En caso de disponer de un servidor DNS en nuestra LAN, tipo Pi-hole, no necesitaremos editar el fichero hosts, será suficiente con añadir un DNS local en Pi-hole:
Introduciremos en Domain [1] el dominio y en IP Address [2] la IP del servidor. Pulsaremos «Add» [2] para añadir la entrada DNS: