• Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Mi Blog
⋙ Cómo configurar Virtual Hosts de Apache en Ubuntu Server

⋙ Cómo configurar Virtual Hosts de Apache en Ubuntu Server

En este nuevo tutorial os enseñaré lo fácil que resulta configurar el servidor Web Apache para permitir varios dominios/Virtual Hosts y conseguir minimizar tanto los costes € como las tareas de administración sobre los servidores. La configuración la he realizado sobre un equipo con GNU/Linux Ubuntu Server, pero podemos extrapolar casi el 100% de los pasos a cualquier otra distribución incluso a otro Sistema Operativo como puede ser Microsoft Windows.

El servidor Web por excelencia es Apache. Aunque a día de hoy existen multitud de alternativas, como lighttpd, nginx, Tomcat, IIS ... Apache es sin duda líder en servir las Webs en Internet e Intranets.

¿Qué es un Virtual Host?

Imaginemos uno de los miles de proveedores de Hosting que hay en el mundo. Cada hosting tiene N clientes y esos clientes quieren tener su Web alojada en los servidores del proveedor. Los Virtual Hosts posibilitan a los servidores Web de gestionar N páginas Webs con dominios diferentes pero con una única IP. Por ejemplo, si configuramos un servidor Apache con 2 Virtual Hosts www.ejemplo1.com y www.ejemplo2.com, podemos alojar dichas páginas en un único servidor con la IP 80.33.120.201.

Y te preguntarás, ¿cuando pido una de esas 2 páginas, como sabe el servidor a que página quiero acceder si la IP resuelta por el DNS es la misma? Bien, la solución son los Virtual Host. ¡Lo has adivinado! En los paquetes TCP que se envían al servidor Web, se especifica el destino al que queremos acceder y es el servidor Web quien analiza esas peticiones y nos autoriza para acceder al contenido de www.ejemplo1.com ó de www.ejemplo2.com.

Cada dominio que configuremos, tendrá asociado un directorio diferente en el cual irá almacenado su contenido. Podemos crear tantos Virtual Hosts como queramos, siempre en función de la carga que soporte el Servidor Web y de la configuración Apache que hagamos. Se podría decir que "no hay limites".

1.- ELEMENTOS UTILIZADOS EN ESTE TUTORIAL

  • [Servidor Web] - GNU/Linux Ubuntu Server 16.04
  • [Cliente Web] - Windows 7

2.- INSTALACIÓN DEL SERVIDOR WEB APACHE

Lo primero, como es habitual en todos los tutoriales, es instalar el paquete base, en nuestro caso será Apache2.

Instalaremos el paquete con usuario root ó con un usuario con permisos de sudo. Actualizaremos previamente nuestros repositorios:

# apt-get update
# apt-get install apache2

3.- ESTRUCTURA Y PERMISOS DE DIRECTORIOS

Por defecto, la instalación de Apache crea un directorio principal llamado /var/www/html/ donde irán alojado el contenido principal del la única página que se crea por defecto en la instalación. En otras distribuciones que no sea Ubuntu, el directorio puede cambiar, aunque generalmente está en /var/www/. Para este tutorial usaremos 2 nombres de dominio de ejemplo, por ejemplo: www.raul-ejemplo1.com y www.raul-ejemplo2.com , ambos alojados en el mismo servidor y gestionados por un único servidor Web.

Crearemos 2 directorios, uno para cada uno de los dominios de ejemplo:

# mkdir /var/www/html/raul-ejemplo1.com/public_html
# mkdir /var/www/html/raul-ejemplo2.com/public_html

Debemos asegurarnos que los directorios tienen como propietario www-data y grupo www-data. Por ejemplo en Red Hat estos usuarios son Apache y Apache, cuidado en este paso:

# chown -R www-data.www-data /var/www/html/raul-ejemplo1.com
# chown -R www-data.www-data /var/www/html/raul-ejemplo2.com

Para asegurarnos que nadie, excepto el propietario www-data pueda escribir en el (los) directorios, cambiaremos los permisos de ambos directorios:

# chmod -R 0755 /var/www/html/raul-ejemplo1.com
# chmod -R 0755 /var/www/html/raul-ejemplo2.com

Dentro de cada uno de los directorios (public_html), podemos crear una página Web diferente para visitarla a posteriori, pero lo que yo haré será descargar el paquete de instalación de Wordpress y descomprimirlo en cada directorio con el fin de emular 2 "sites" web.

  • raul-ejemplo1.com = Wordpress1
  • raul-ejemplo2.com = Wordpress2

Como puede verse, las direcciones para entrar a los 2 sites son bastante "feas": http://192.168.145.212/raul-ejemplo1.com/public_html/ y http://192.168.145.212/raul-ejemplo2.com/public_html/:

VirtualHost Apache

2 instalaciones diferentes de Wordpress

4.- CONFIGURACIÓN DEL VIRTUALHOST 1

Los archivos Virtual Host contienen la información necesaria para el (los) dominios en cuestión y le indican al servidor Web Apache como deben responder a las peticiones realizadas a dicho(s) dominio(s).

Por defecto, Apache incluye un archivo Virtual Host llamado 000-default.conf y sobre el cual podemos basar nuestra configuración inicial. Por tanto el primer paso será copiar dicho fichero para el primer dominio www.raul-ejemplo1-com:

# cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/raul-ejemplo1.com.conf

El archivo raul-ejemplo1.com (sin comentarios) tiene el siguiente aspecto:


ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Editaremos el fichero y lo configuraremos para que se adapte a nuestras necesidades. Mostraré como queda el fichero final y explicaré las líneas importantes que hay que configurar en él:


ServerAdmin Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
ServerName raul-ejemplo1.com
ServerAlias www.raul-ejemplo1.com
DocumentRoot /var/www/html/raul-ejemplo1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/raul-ejemplo1_error.log
CustomLog ${APACHE_LOG_DIR}/raul-ejemplo1_access.log combined

  • ServerAdmin: Indicamos el email del administrador
  • ServerName: Indicamos el nombre del dominio
  • ServerAlias: Indicamos el nombre completo del dominio
  • DocumentRoot: Indicamos el PATH al directorio principal donde se ubican los ficheros Web.
  • ErrorLog: Ruta y nombre del fichero de error.
  • CustomLog: Ruta y nombre del fichero de accesos.

Guardamos el fichero.

5.- CONFIGURACIÓN DEL VIRTUALHOST 2

Copiaremos el fichero de configuración del dominio raul-ejemplo1.com y modificaremos los campos para adaptarlos al segundo dominio:

# cp /etc/apache2/sites-available/raul-ejemplo1.com.conf /etc/apache2/sites-available/raul-ejemplo2.com.conf

El fichero de configuración del segundo dominio raul-ejemplo2.com tendrá el siguiente aspecto:


ServerAdmin Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
ServerName raul-ejemplo2.com
ServerAlias www.raul-ejemplo2.com
DocumentRoot /var/www/html/raul-ejemplo2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/raul-ejemplo2_error.log
CustomLog ${APACHE_LOG_DIR}/raul-ejemplo2_access.log combined

Para finalizar, guardaremos el fichero .

6.- HABILITAR LOS 2 NUEVOS SITES

Para activar los 2 nuevos "sites", debemos recurrir a la herramienta de Apache a2ensite (Apache Enable Sites). Activaremos los 2 dominios con los siguientes comandos y después recargaremos la configuración de Apache:

# a2ensite raul-ejemplo1.com.conf
# a2ensite raul-ejemplo2.com.conf
# /etc/init.d/apache2 reload

Virtualhost ApacheActivación y recarga de los 2 nuevos sites

7.- COMPROBACIÓN DE LOS VIRTUALHOSTS SIN SERVIDOR DNS

Para probar si nuestro servidor está reconociendo los 2 VirtualHost nuevos y no tenemos un servidor de DNS que nos resuelva dichos dominios, podemos crear 2 nuevas entradas fijas de forma manual en el fichero "hosts" de nuestro equipo. Para el caso de los Windows el fichero es c:\Windows\System32\Drivers\etc\lmhosts y en los GNU/Linux /etc/hosts.

Deberemos añadir las lineas siguientes:

192.168.145.212 raul-ejemplo1.com    
192.168.145.212 www.raul-ejemplo1.com
192.168.145.212 raul-ejemplo2.com
192.168.145.212 www.raul-ejemplo2.com

La dirección IP de mi servidor Web es 192.168.145.212. Cambia esa IP por la de tu servidor Web.

Virtualhost Apache

Virtualhost funcionando

8.- COMPROBACIÓN DE LOS VIRTUALHOSTS CON UN SERVIDOR DNS

Para configurar un servidor DNS con los 2 nuevos dominios, hay que instalar el servidor Bind9 y añadir las entradas de los 2 Virtual Host. En la siguiente URL puedes encontrar un manual de como instalar tu propio servidor de DNS:

http://www.raulprietofernandez.net/blog/gnu-linux/como-instalar-un-servidor-de-dns-en-gnu-linux-debian

ENJOY!


Raúl Prieto Fernández

Sitio Web: /

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

Comentarios  

oscar
# oscar 12-07-2017 09:46
hola,
puedo crear virtualhosts, sin la carpeta html? es decir en lugar de: /var/www/html/ejemplo1.com ponerlos en esta ruta /var/www/ejemplo1.com

Lo digo porque actualmente los tengo configurados así:
/var/www/ejemplo1.com/public_html
pero no quiero tener ninguna carpeta.
¿No hay problema de seguridad en hacerlo así, o es necesario una carpeta html?

los dominios solo los administro yo.
doy permisos a la carpeta 644 y 755 para archivos y directorios y ya está.
un cordial saludo.
Responder
Ral Prieto Fernndez
# Raúl Prieto Fernández 12-07-2017 21:04
Hola:

Puedes hacerlo como quieras, siempre y cuando cada DocumentRoot apunte correctamente al Raíz donde están los ficheros index.php,index.html,index.asp etc ...


Por ejemplo:

www.dominio1.com puede estar en /var/www/dominio1/

y

www.dominio2.com puede estar en /var/ww/dominio2/public_html/


Recuerda que debes cambiar en la parte de los VirtualHosts el DocumentRoot para que Apache sepa cual es el raíz de cada Web :)

Dale permisos a los directorios de usuario y grupo Apache y en principio no deberías tener ningún problema de seguridad. Lo suyo es hacer Chroot de esos directorios, pero eso es otro post aparte :D

En resumen: Puedes hacerlo sin problema :)

un saludo
Responder
oscar
# oscar 12-07-2017 22:38
Gracias Raul por tu valiosa información.

sería así?:
sudo chown -R $USER:$USER /var/www/dominio1.com
sudo find /var/www/dominio1.com -type f -exec chmod 644 {} \;
sudo find /var/www//dominio1.com -type d -exec chmod 755 {} \;

tendría q hacer algo más?

otra pregunta, ¿como puedo darle los permisos originales a www?, ya que lo anterior lo hice para el directorio www y creo que no es muy seguro hacerlo así.
Responder
Ral Prieto Fernndez
# Raúl Prieto Fernández 13-07-2017 08:25
Hola Oscar:

Concretamente sería:

sudo chown -R $USUARIO-APACHE:$GRUPO-APACHE /var/www/dominio1.com

Si no recuerdo mal en Debian tanto el grupo como el usuario son "www-data" en Ubuntu es "apache" y en RedHat "http". Te lo digo de memoria :)


Con tus otros comandos ,lo que haces es buscar los ficheros con permisos rw-r-r y los directorios con rwxr-xr-x, nada mas :) . Por norma general los ficheros serán 644 y los directorios 755, aunqnue en circunstancias especiales es probable que sea necesario cambiarlos, sobretodo en directorios ó en ficheros "sensibles" a la modificación.

Los permisos originales del directorio /var/www/ me imagino que sean "755" y el directorio pertenezca al usuario y al grupo de Apache, así solamente Apache podrá escribir. Aunque también me he encontrado en alguna distribución que el propietario de /var/www es root, el grupo es apache y los permisos son 775 .... aunque no es muy habitual.

Un saludo
Responder
oscar
+1 # oscar 13-07-2017 16:05
"Con tus otros comandos ,lo que haces es buscar los ficheros con permisos rw-r-r y los directorios con rwxr-xr-x, nada mas :)"

creo que NO, fijate bien pq despues del find aparece chmod:
sudo find /var/www/dominio1.com -type f -exec chmod 644 {} \;
sudo find /var/www//dominio1.com -type d -exec chmod 755 {} \;
Responder
Ral Prieto Fernndez
# Raúl Prieto Fernández 13-07-2017 16:37
Hola Oscar:

Si, disculpa, llevas razón. Es lo que tiene responder estando a 40 cosas a la vez, jejeje. Buscas los ficheros y le das 644 y directorios 755, está clarísimo, jejeje, sorry por mi comentario anterior.

De todas formas, mucho cuidado con esos comandos porque es posible que estés dando más permisos de los necesarios algunos ficheros y/o directorios donde no quieras que accedan otros usuarios ...

Por eso el usar el "-r" de recursive pude llegar a ser un poco...peligroso ;)

Por regla "general" los ficheros deben ser (644) y directorios (755).

Por ejemplo hay ficheros como el .htaccess que suele ser (640) ó (604) y ficheros de configuración con datos sensibles, como por ejemplo los que se usan en los CMS (Gestores de Contenido) como Wordpress o Joomla, se usa (600).

Los directorios: (755 o 750).

Y NUNCA poner permisos 777 a algún archivo/directorio. Con 755 bastaría.

Por eso te digo, cuidado con el recursive.

Un saludo
Responder
oscar
# oscar 18-07-2017 22:47
ok.
tengo otra duda, tengo los siguientes permisos en la carpeta www:
drwxrwxr-x

¿están bien?
Responder
Ral Prieto Fernndez
# Raúl Prieto Fernández 19-07-2017 13:24
Hola:

En una instalación limpia de Debian 9, los permisos de /var/www son 775 con usuario:root y grupo:root.

Dentro de él, está el directorio html con permisos 755 con usuario:root y grupo:root.

El directorio "html" debes asignarle permisos para que tu usuario pueda subir ficheros a él, si no solamente root podrá escribir en él.

Por tanto, no veo ningún problema en los permisos que me has indicado.

Un saludo
Responder

Escribir un comentario

Información básica sobre Protección de Datos

Responsable: Raúl Prieto Fernández +info

Finalidad: Moderar los comentarios a los artículos publicados en el blog. +info

Legitimación: Consentimiento del interesado +info

Destinatarios: No se comunicarán datos a persona u organización alguna. +info +info

Derechos: Tiene derecho a Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional. +info

Plazo de conservación de los datos: Hasta que no se solicite su supresión por el interesado.

Información adicional: Puede consultar la información adicional y detallada sobre Protección de Datos Personales en mi página web raulprietofernandez.net +info

     

Código de seguridad
Refescar


LOGIN / ENTRAR

BUSCAR EN EL BLOG

TWITTER TIMELINE

Booking.com

ENCUESTA

¿Cual es el mejor Sistema Operativo?

Como es lógico, esta web utiliza cookies propias y de terceros para elaborar información estadística y mostrar publicidad personalizada a través del análisis de tu navegación, conforme a la política de cookies.

  Si continúas navegando, aceptas su uso.