Configurar host virtuales de Apache en Ubuntu Server 14.04

En esta ocasión vamos a explicar como configurar host virtuales en nuestro servidor si utilizamos Apache Server y Ubuntu

Virtual Host

El término virtual host se refiere a que podamos alojar múltiples sitios web en un solo equipo. Los host virtuales pueden estar basados en IP, lo que significa que se necesita una IP para cada sitio web, o también se pueden basar en nombres de dominio, con lo cual podemos tener múltiples sitios utilizando una sola dirección IP.

 

Generalmente la configuración que mas se utiliza es la que está basada en nombres de dominio, y es la forma en la que vamos a trabajar para este pequeño tutorial.

Supongamos que estamos montando un servidor compartido donde vamos a estar alojando sitios para diferentes personas lo conveniente seria crear host virtuales alojados en las carpetas personales de cada usuario.

1. Crear un usuario

Procedemos a crear al usuario que vamos a asociar al dominio del sitio.

 sudo adduser misitio 

2. Crear la estructura de directorios.

Ahora creamos la carpeta public_html que es donde se alojaran los archivos del sitio y a lo que se tendrá acceso desde el navegador web.

 sudo mkdir /home/misitio/public_html 

La carpeta la creamos como administradores por lo tanto tenemos que cambiar al propietario por el usuario final que en este caso seria misitio.

 sudo chown -R misitio:misitio /home/misitio/public_html 

Posteriormente modificamos los permisos.

 sudo chmod -R 755 /home/misitio 

3. Configurar apache

Para modificar la configuración de apache abrimos el siguiente archivo: /etc/apache2/apache2.conf

sudo gedit /etc/apache2/apache2.conf

Buscamos la directiva <Directory /var/www/> la cual se encarga de denegar el acceso fuera de /var/www/ y agregamos una estructura similar para la carpeta /home/misitio/public_html/ en la opción AllowOverride colocamos All para que Apache tome en cuanta la configuración utilizando el archivo .htaccess

 <Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

<Directory /home/codedrinks/public_html/>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted
</Directory>

4. Crear un host virtual

Hasta aquí ya tenemos la estructura para el sitio, ahora tenemos que crear el host virtual para que podamos acceder a la página utilizando el nombre de dominio que deseemos.

Vamos a tomar como base el archivo por default que crea Apache, dicho archivo se ubica en la siguiente ruta /etc/apache2/sites-available/000-default.conf  al cual le haremos una copia y lo nombraremos con en dominio del sitio que se desea configurar

 sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/misitio.com.conf

Ya que tenemos la copia abrimos el archivo y lo configuramos con la información del sitio.

 sudo gedit /etc/apache2/sites-available/misitio.com.conf 

El archivo al final tendria que quedar así:

<VirtualHost *:80>
    ServerName misitio.com
    ServerAlias www.misitio.com
    ServerAdmin webmaster@misitio.com
    DocumentRoot /home/misitio/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

5. Habilitar el nuevo host virtual

Ya que hemos creado nuestro archivo de host virtual tenemos que habilitarlo, para ello Apache incluye algunos helpers como a2ensite para habilitar un sitio o a2dissite para deshabilitar un sitio.

sudo a2ensite misitio.com.conf

Ahora tenemos que reiniciar nuestro servidor para que los cambios se apliquen.

sudo service apache2 restart

 

6. Configurar el archivo hosts (Opcional)

Si tenemos un servidor DNS apuntando a nuestro servidor omitimos la configuración del archivo hosts debido a que el servidor DNS se encargaría de resolver nuestra dirección. En caso de que no contemos con un servidor DNS abrimos el archivo hosts

sudo gedit /etc/hosts

y agregamos las siguientes lineas

127.0.0.1 misitio.com
127.0.0.2 www.misitio.com

7. Crear el archivo index.html

Creamos el archivo html que se va a mostrar cuando se acceda al sitio, se llamará index.html y lo guardaremos dentro de la carpeta public_html

<html>
  <head>
    <title>Bienvenido a mi página!</title>
  </head>
  <body>
    <h1>Felicidades el host virtual trabaja de forma correcta!!!</h1>
  </body>
</html>

Ahora solo abrimos el navegador y escribimos el nombre de nuestro sitio: www.misitio.com 0 misitio.com para que nos muestre la página que acabamos de crear.

9 comentarios en “Configurar host virtuales de Apache en Ubuntu Server 14.04”

  1. sacratifo dice:

    Tiiio que da error en el tercer comando: sudo chown -R misitio:misitio /home/misitio/public_html

    ARreglalelo porfis

    pd: tds pts

  2. susacapuntas dice:

    GRACIAS infinitas. Estaba creando las url amigables en el propio archivo .conf del host virtual y no en apache2.conf. En serio te debo la vida.

  3. Rey dice:

    Saludos. El post está muy bueno y detallado. Felicidades. Por mi parte te planteo lo siguiente:

    Hice todo tal como lo que indicas, excepto la parte de habilitar el sitio con a2ensite, porque ese helper no lo reconoce mi terminal, pero investigando supe que lo que hace es añadir un enlace simbólico a la carpeta sites-enabled del archivo que le indiquemos. Yo lo hice manualmente.

    El punto está en que no funciona. Por más que coloque la URL del dominio que diga, no ejecuta la página html o aplicación que está en public_html sino que sale la pantalla de inicio de xampp. He hecho de todo y verificado hasta decir basta, pero no funciona así. Siempre sale esa pantalla y no logro cargar/ejecutar mis propias páginas/aplicaciones/sitios con ese dominio.

    Algo que noto es que yo tengo instalado lammp, pero la terminal siempre dice que el paquete apache2 no está instalado.

    ¿Qué puedo hacer? Se lo agradezco.

    1. denker dice:

      Hola, gracias por tu comentario.
      Con que distribucion linux estas trabajando?, el ejemplo es con ubuntu y apache se encuentra instalado en la carpeta /etc/apache2, verifica que tengas esta carpeta, debido a que dentro de ella encuentras los archivos de configuración.
      Si estas trabajando con centos por ejemplo la carpeta de apache podria ser /etc/httpd/ y cambiaria un poco la configuración de hostvirtuales

  4. Rey dice:

    La distro es Ubuntu. Efectivamente, está Apache2 en /etc. Estuve aplicando tus indicaciones sobre manipulación de archivos de apache al apache que está en /opt/lampp/apache2, que es como también lo tengo. No sé si por eso no funcionaba.

    En todo caso, ya logré montar el virtualhost, pero siguiendo un procedimiento que incluía ciertas cosas diferentes a las de aquí y omitiendo otras que también están aquí, como manipular: opt/lampp/etc/httpd.conf. Para explicarme mejor y para reseñar este caso particular, comparto el enlace del post que sí aplicaba. Es este:
    http://travesuras.wordpress.com/2009/02/17/20090217-1/

    ¡Gracias por tu publicación y tu ayuda!

  5. Noctis-Anto dice:

    Denker, te amo. Gracias por este tutorial, no sé por qué pero fue el único que me funcionó, no sé si por estar actualizado el sistema operativo, apache, no sé.
    Muy buen tutorial.

  6. mizael dice:

    Hola Denker ! Primero una felicitacion por compartir tus conocimientos con la web, utilizo ubuntu 14.04 server y he hecho todas las instrucciones al pie de la letra pero al final me manda el siguiente error:
    Network Access Message: The website cannot be found
    Explanation: An IP address for the website you requested could not be found. As a result, it was not possible to access the site.

    Try the following:
    Refresh page: Search for the page again by clicking the Refresh button. The timeout may have occurred due to Internet congestion.
    Check spelling: Check that you typed the Web page address correctly. The address may have been mistyped.
    Access from a link: If there is a link to the page you are looking for, try accessing the page from that link.
    If you are still not able to view the requested page, try contacting your administrator or Helpdesk.

    Technical Information (for support personnel)
    Error Code 11004: Host not found
    Background: This error indicates that the gateway could not find the IP address of the website you are trying to access, possibly due to lack of information in the DNS server.
    Date: 3/14/2015 1:05:52 AM [GMT]
    Server: mxginoficor06.telcel.net
    Source: DNS error

    He buscado pero no logro resolverlo, alguna sugerencia. De ante mano gracias

  7. Chie dice:

    Nota: En el paso 3 SUSTITUIR la palabra “cooldrinks” por el nombre del usuario que creaste en el paso 1.

  8. MrRoox dice:

    Muchas gracias esto me fue de mucha utilidad para aclarar un par de cuestiones!

Deja un comentario