0

cómo configurar virtual host de apache en ubuntu lts



cómo configurar virtual host de apache en ubuntu lts

cómo configurar virtual host de apache en ubuntu lts . Esta vez traigo un manual de como gestionar varios dominios con una misma Dirección IP con en el servidor web Apache, algo habitual en Hosting Compartido una solución ideal en entornos de prueba incluso en producción para ofrecer un nivel extra de Seguridad.

mas tutoriales de informatica y programacion

Temas mas vistos

¿Que es Apache ?

El servidor Apache HTTP es un servidor web de codigo abierto para plataformas Unix-like, Windows incluso Mac incluye protocolos HTTP y opción de Sitio Virtual. Es el servidor web más popular del mundo (Desde 1996) ya que es muy estable además de seguridad optima (siendo bien configurado). Apache es el servidor que sigue siendo desarrollado bajo programadores de Apache Software Foundation.

Principales características de Apache

Entre las principales características se encuentran:

  • Seguridad SSL y TLS para conexiones cifradas (HTTPS).
  • SGDB (Autentificacion de datos).
  • Soporte con lenguajes de programación como perl, php, python.
¿Que es un Virtual Hosts?

El termino virtual hosts hace referencia a la practica de correr una o mas web de diferentes dominios en una misma direccion IP utilizando la redireccion de puertos de manera interna para cada dominio. Se podria definir a un Virtual Host como el metodo de una empresa de envios para transferir cada paquete a la sucursal correspondiente, apache fue uno de los primeros servidores web en soportar host virtuales basados en IP sin instalar algun plugin adicional. Después de la version 1.1 se añade soporte a la creacion de Host Virtuales basados en IP y en nombres.

Diferencias entre el hosting vitual basado en nombres y el basado en IPs

Apache soporta 2 formas para configurar un virtualhost:

  • Por IP
  • Por nombres de dominio

En la solución por IP apache se fija de la IP del cliente que realiza la petición y de acuerdo al rango de Ip que tengas predefinido puedes entrar al sitio A o B esto en conjunto con un geolocalizador por Ip es muy ventajoso en paginas con varios lenguajes.

El hosting virtual basado en nombres es normalmente más sencillo, es el que aplicaremos en el laboratorio tan solo es necesario configurar el Servidor DNS sea externo o local para que apunte a nuestro servidor que se encargará de filtrar la cabecera HTTP y en función de ello redirigir al sitio adecuado. La mayor ventaja es que puedes reducir dramáticamente el numero de direcciones IP por dominio caso contrario por la redireccion por IP en donde necesitarías una IP Publica por cada sitio diferente. Tendrás situaciones en que no podrás implementar el hosting basado en nombres por diferentes razones que se listaran:

  • Algunos navegadores web antiguos no son compatibles con el hosting virtual basado en nombres. Para que el hosting virtual basado en nombres funcione, el cliente debe enviar la cabecera de Host HTTP.
  • El hosting virtual basado en nombres no se puede usar junto con SSL Si lo que quieres es implantar HTTPS no es tu opción.
  • Algunos sistemas operativos y algunos elementos de red tienen implementadas técnicas de gestión de ancho de banda que no pueden diferenciar entre hosts a no ser que no estén en diferentes direcciones IP.
Preparando el Sistema.

Para configurar el Host Virtual es necesario instalar el servidor Apache el cual viene incluido en los Repositorios de Ubuntu.

  1. sudo apget install apache2

Una vez instalado podemos correrlo con:

  1. sudo service apache start

Creamos un usuario sin derechos de Administrador que sera el dueño de los archivos del servidor web:

  1. useadd fulanitopasswd fulanito#Introducimos la contraseña para el usuario

Así estará sin permisos administrator.

Crear Directorio

Debemos crear la estructura de los directorios que mantendrán la información de los sitios.

Nuestro documento raíz debe ser configurado en los directorios individuales que suelen ir dentro de la ruta /var/www. Aquí crearemos los directorios para los dos Hosts Virtuales que configuraremos de forma de ejemplo. Para crear el directorio se puede utilizar la opción -p del comando mkdir, de manera que creará todos los directorios y subdirectorios necesarios.

  1. sudo mkdir p /var/www/fulanito.com/httpdocssudo mkdir p /var/www/menganito.com/httpdocs

Este será el directorio raiz de los 2 Dominios.

Dar Permisos

Para dar permisos al usuario para que pueda trabajar con los ficheros de los directorios, recomiendo utilizar el usuario non-root que hemos creado y adicional habilitar su acceso por FTP o SFTP

  1. sudo chown R fulanito.fulanito /var/www/fulanito.com/httpdocssudo chown R menganito.menganito /var/www/menganito.com/httpdocs

Tu servidor ahora tiene los permisos necesarios para mostrar el contenido, y el usuario deberá ser capaz de crear contenido en los directorios a medida que sea necesario.

Crear la pagina de inicio

Solo vamos a hacer una demostración, así que nuestras páginas serán muy simples. Solo crearemos un archivo index.html para cada sitio.

  1. sudo touch /var/www/fulanito.com/public_html/index.htmlsudo touch /var/www/menganito.com/public_html/index.html

Empezamos con el archivo de fulanito para eso usamos nuestro editor preferido en mi caso vim.

  1. sudo vim /var/www/fulanito.com/public_html/index.html
  1. <html> <head> <title>Haz entrado al sitio de Fulanito</title> </head> <body> <h1>Perfecto! Ya tiene configurado el Host Virtual de Fulanito </h1> </body></html>

Guardamos el archivo con :wq en caso de usar vim y empezamos con menganito.

  1. sudo vim /var/www/menganito.com/public_html/index.html
  1. <html> <head> <title>Haz entrado al sitio de Menganito</title> </head> <body> <h1>Perfecto! Ya tienes configurado el Host Virtual de Menganito</h1> </body></html>

Guardar el fichero y salir del editor.

Crear ficheros de los nuevos Virtual Hosts

Los archivos Virtual Host son archivos que contienen información y configuración especifica para cada dominio por ejemplo podemos tener una configuración global del Apache y unas opciones independientes para un dominio en especifico.

Apache incluye un archivo Virtual Host por defecto denominado 000-default.conf que podemos usar para saltarnos al punto. Realizaremos una copia para trabajar sobre ella y crear nuestro Virtual Host para cada dominio.

Iniciaremos con un dominio, configurado, copiarlo para el segundo dominio, y después realiza los ajustes necesarios. La configuración por defecto de Ubuntu requiere que cada archivo de configuración de Virtual Host termine en .conf.

Crear el Virtual Host de Fulanito

Empezamos por copiar el archivo por default de apache que trae por defecto y utilizarlo como base.

  1. sudo cp /etc/apache2/sitesavailable/000default.conf /etc/apache2/sitesavailable/fulanito.com.conf

Luego lo editamos y cambiamos los valores por nuestro dominio y ubicacion raiz.

  1. sudo vim /et/apache2/sitesavailable/fulanito.com

Editaremos el nombre del dominio que va a utilizar el host virtual que en este caso es fulanito.

  1. ServerName fulanito.com

Si queremos que nuestro sitio sea accesible a través de mas de un nombre de dominio (practica usada por google), debes añadirlo en el ServerAlias, de la siguiente forma.

  1. <VirtualHost *:80> ServerName fulanito.com ServerAlias www.fulanito.com fulanitooo.com www.fulanitooo.com …

Recuerda que debes tener acceso a los dominios públicos que añadas en ServerAlias, en mi caso no hará falta porque será todo en local.

Lo próximo sera añadir el correo del webmaster que sera el encargado de la administración.

  1. ServerAdmin webmaster@fulanito.com

Y Añadir la carpeta Raiz de nuestro Dominio.

  1. DocumentRoot /var/www/fulanito.com/httpdocs

Crear el Virtual Host de Menganito

Seguimos esta vez con el dominio de menganito y copiaremos directamente del archivo de fulanito.

  1. sudo cp /etc/apache2/sitesavailable/fulanito.com.conf /etc/apache2/sitesavailable/menganito.com.conf

Editamos para que quede así:

    1. <VirtualHost *:80>
    1. ServerAdmin admin@menganito.com
    1. ServerName menganito.com
    1. ServerAlias www.menganito.com
    1. DocumentRoot /var/www/menganito.com/httpdocs
    1. ErrorLog ${APACHE_LOG_DIR}/error.log
    1. CustomLog ${APACHE_LOG_DIR}/access.log combined
  1. </VirtualHost>

Guardamos los cambios.

Habilitar los nuevos dominios en Apache

Debemos habilitar el acceso de los nuevos sitios para que Apache los tome en cuenta luego de reiniciar usamos:

  1. sudo a2ensite fulanito.comsudo a2ensite menganito.com

Por ultimo reiniciar el servidor Apache:

  1. sudo service apache2 restart

Es posible que el sistema muestre un mensaje parecido a este:

  1. Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName

Como se trata de un mensaje de advertencia, no tenemos problemas y no impedirá que accedamos a los nuevos sitios.

Configurar Hosts

Este paso es opcional, en caso de tener acceso a dominios públicos pagados podemos saltar el paso, en mi caso como es un lab y los dominios son falsos debo editar el archivo /etc/hosts de mi maquina local.

En caso de Linux debemos editar el archivo:

  1. sudo vim /etc/hosts

En caso de windows debemos editar con el bloc de notas en modo administrador el archivo:

  1. C:\Windows\System32\drivers\etc\hosts

El cualquiera de los Sistemas Operativos el archivo es muy similar y debemos añadir al final los dominios:

  1. # Host Database## localhost is used to configure the loopback interface# when the system is booting. Do not change this entry.##127.0.0.1 localhost#Virtual Hosts 127.0.0.1 fulanito.com127.0.0.1 menganito.com…

Esto resulta muy útil mientras se está desarrollando el sitio web antes de subirlo al servidor, de manera que se puede navegar y probar igual que si lo hace en real.

Para que los cambios hechos en el fichero /etc/hosts surtan efecto, se puede ejecutar el siguiente comando:

  1. sudo /etc/init.d/networking restart
Prueba tu servidor Apache

Script para añadir Host Virtuales

La tarea de los Vhost es muy común y repetitiva para finalizar añado un pequeño script en bash para que puedas automatizar esta tarea en servidores con ubuntu de manera mas rápida.

    1. #!/bin/bash
    1. TEXTDOMAIN=Example.com
    1.  
    1. ### Definir los Argumentos por este orden Accion, Dominio y Directorio Raiz.
    1. action=$1
    1. domain=$2
    1. rootDir=$3
    1. owner=$(who am i | awk ‘{print $1}’)
    1. email=‘webmaster@localhost’
    1. sitesEnable=‘/etc/apache2/sites-enabled/’
    1. sitesAvailable=‘/etc/apache2/sites-available/’
    1. userDir=‘/var/www/’
    1. sitesAvailabledomain=$sitesAvailable$domain.conf
    1.  
    1. ### NO MODIFICAR
    1.  
    1. if [ «$(whoami)» != ‘root’ ]; then
    1. echo $«No tienes permisos para correrlo $0 al ser un usuario sin privilegios. Use sudo»
    1. exit 1;
    1. fi
    1.  
    1. if [ «$action» != ‘create’ ] && [ «$action» != ‘delete’ ]
    1. then
    1. echo $«Debes especificar una accion {create, delete}»
    1. exit 1;
    1. fi
    1.  
    1. while [ «$domain» == «» ]
    1. do
    1. echo e $«Introducir un dominio por ejemplo example.com»
    1. read domain
    1. done
    1.  
    1. if [ «$rootDir» == «» ]; then
    1. rootDir=${domain//./}
    1. fi
    1.  
    1. ### if root dir starts with ‘/’, don’t use /var/www as default starting point
    1. if [[ «$rootDir» =~ ^/ ]]; then
    1. userDir=»
    1. fi
    1.  
    1. rootDir=$userDir$rootDir
    1.  
    1. if [ «$action» == ‘create’ ]
    1. then
    1. ### check if domain already exists
    1. if [ -e $sitesAvailabledomain ]; then
    1. echo -e $»El dominio ya existe por favor añadir otro.»
    1. exit;
    1. fi
    1.  
    1. ### check if directory exists or not
    1. if ! [ -d $rootDir ]; then
    1. ### create the directory
    1. mkdir $rootDir
    1. ### give permission to root dir
    1. chmod 755 $rootDir
    1. ### write test file in the new domain dir
    1. if ! echo «<?php echo phpinfo(); ?>» > $rootDir/phpinfo.php
    1. then
    1. echo $«ERROR: Permisos insuficientes para escribir en el directorio $userDir/$rootDir/phpinfo.php. Verificar tus permisos»
    1. exit;
    1. else
    1. echo $«Added content to $rootDir/phpinfo.php»
    1. fi
    1. fi
    1.  
    1. ### create virtual host rules file
    1. if ! echo «
    1. <VirtualHost *:80>
    1. ServerAdmin $email
    1. ServerName $domain
    1. ServerAlias $domain
    1. DocumentRoot $rootDir
    1. <Directory />
    1. AllowOverride All
    1. </Directory>
    1. <Directory $rootDir>
    1. Options Indexes FollowSymLinks MultiViews
    1. AllowOverride all
    1. Require all granted
    1. </Directory>
    1. ErrorLog /var/log/apache2/$domain-error.log
    1. LogLevel error
    1. CustomLog /var/log/apache2/$domain-access.log combined
    1. </VirtualHost>» > $sitesAvailabledomain
    1. then
    1. echo e $«There is an ERROR creating $domain file»
    1. exit;
    1. else
    1. echo e $«\nNew Virtual Host Created\n»
    1. fi
    1.  
    1. ### Add domain in /etc/hosts
    1. if ! echo «127.0.0.1 $domain» >> /etc/hosts
    1. then
    1. echo $«ERROR: Not able to write in /etc/hosts»
    1. exit;
    1. else
    1. echo e $«Host added to /etc/hosts file \n»
    1. fi
    1.  
    1. if [ «$owner» == «» ]; then
    1. chown R $(whoami):$(whoami) $rootDir
    1. else
    1. chown R $owner:$owner $rootDir
    1. fi
    1.  
    1. ### enable website
    1. a2ensite $domain
    1.  
    1. ### restart Apache
    1. /etc/init.d/apache2 reload
    1.  
    1. ### show the finished message
    1. echo e $«Complete! \nYou now have a new Virtual Host \nYour new host is: http://$domain \nAnd its located at $rootDir»
    1. exit;
    1. else
    1. ### check whether domain already exists
    1. if ! [ e $sitesAvailabledomain ]; then
    1. echo e $«This domain does not exist.\nPlease try another one»
    1. exit;
    1. else
    1. ### Delete domain in /etc/hosts
    1. newhost=${domain//./\\.}
    1. sed i «/$newhost/d» /etc/hosts
    1.  
    1. ### disable website
    1. a2dissite $domain
    1.  
    1. ### restart Apache
    1. /etc/init.d/apache2 reload
    1.  
    1. ### Delete virtual host rules files
    1. rm $sitesAvailabledomain
    1. fi
    1.  
    1. ### check if directory exists or not
    1. if [ d $rootDir ]; then
    1. echo e $«Delete host root directory ? (y/n)»
    1. read deldir
    1.  
    1. if [ «$deldir» == ‘y’ o «$deldir» == ‘Y’ ]; then
    1. ### Delete the directory
    1. rm rf $rootDir
    1. echo e $«Directory deleted»
    1. else
    1. echo e $«Host directory conserved»
    1. fi
    1. else
    1. echo e $«Host directory not found. Ignored»
    1. fi
    1.  
    1. ### show the finished message
    1. echo e $«Complete!\nYou just removed Virtual Host $domain»
    1. exit 0;
  1. fi

Uso del Script para crear un nuevo dominio

Haremos un nuevo vhosts para el dominio zutano.

  1. sudo virtualhost create zutano.com /var/www/zutano.com/httpdocs

Con eso estará creado.







comparte con tus amigos

codigo fuente

Deja un comentario

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