Servidor Web en Vagrant

Esta entrada está referida al ejercicio de servidor web que nos plantea nuestro profesor en la asignatura de “servicios de red e internet”, aquí el ejercicio completo: http://josedom24.github.io/mod/serviciosgs/e_web_25

1. Instala el servidor web Apache2 en una máquina. Modifica la pagina index.html que viene por defecto y accede a ella desde un navegador.

Creamos una nueva máquina vagrant e instalamos apache2.

root@vagrant-debian-wheezy:/home/vagrant# apt-get install apache2

Vamos al directorio «/var/www» y modificamos el fichero «index.html»:

Selección_010

Guardamos los cambios y accedemos desde el navegador a la ip de la máquina vagrant:

Selección_011El servidor web funciona correctamente.

2. Queremos que nuestro servidor web ofrezca dos sitios web, teniendo en cuenta lo siguiente:

  • Cada sitio web tendrá nombres distintos.
  • Cada sitio web compartirán la misma dirección IP y el mismo puerto (80).

Los dos sitios web tendrán las siguientes características:

  1. El nombre de dominio del primero será www.iesgn.org, su directorio base será /srv/www/iesgn y contendrá una página llamada index.html, donde sólo se verá una bienvenida a la página del Instituto Gonzalo Nazareno.
  2. En el segundo sitio vamos a crear una página donde se pondrán noticias por parte de los departamento, el nombre de este sitio será www.departamentosgn.org, y su directorio base será /srv/www/departamentos. En este sitio sólo tendremos una página inicial index.html, dando la bienvenida a la página de los departamentos del instituto.

Desactivamos el sitio web por defecto:

root@vagrant-debian-wheezy:/etc/apache2/sites-available# a2dissite default
 Site default disabled.
 To activate the new configuration, you need to run:
 service apache2 reload

Creamos 2 nuevos sitios, para ello vamos al directorio  «/etc/apache2/sites-available» y hacemos lo siguiente:

cp default iesgn
cp default departamentos

Creamos los directorios  «iesgn» y «departamentos» en   «/srv/www» :

root@vagrant-debian-wheezy:/srv/www# mkdir iesgn
root@vagrant-debian-wheezy:/srv/www# mkdir departamentos

Cambiamos el propietario y el grupo de los directorios creados a «www-data»:

root@vagrant-debian-wheezy:/srv/www# chown -R www-data:www-data .

Procedemos a modificar el fichero «iesgn» en el que indicamos que el ServerName será «www.iesgn.org», además cambiaremos el DocumentRoot y el Directory al directorio creado en «/srv/www/iesgn»:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.iesgn.org
        DocumentRoot /srv/www/iesgn/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /srv/www/iesgn>
                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
</VirtualHost>

Modificamos el fichero «departamentos»:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.departamentosgn.org
        DocumentRoot /srv/www/departamentos
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /srv/www/departamentos>        
                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
</VirtualHost>

Activamos los nuevos sitios con la orden «a2ensite»:

root@vagrant-debian-wheezy:/etc/apache2/sites-available# a2ensite iesgn
root@vagrant-debian-wheezy:/etc/apache2/sites-available# a2ensite departamentos

Una vez activados ambos sitios procedemos a reiniciar el servidor apache2:

root@vagrant-debian-wheezy:/srv/www# service apache2 restart
[ ok ] Restarting web server: apache2 ... waiting .

Creamos el fichero «index.html» en cada directorio, copiamos el fichero por defecto y lo modificamos:

root@vagrant-debian-wheezy:/srv/www# cp /var/www/index.html /srv/www/departamentos/index.html
root@vagrant-debian-wheezy:/srv/www# cp /var/www/index.html /srv/www/iesgn/index.html

El fichero «index.html» de la página del departamento quedará así:

Selección_012

Fichero «index.html» de la página de iesgn:

Selección_013

3. Configura la resolución estática en los clientes y accede a las páginas web.

En la máquina local modificamos el fichero «/etc/hosts» para que cuando introduzcamos el nombre de dominio accedamos al servidor web alojado en la máquina vagrant con dirección «192.168.92.92»

127.0.0.1       localhost
127.0.1.1       debian.localdomain      debian
192.168.92.92   www.iesgn.org
192.168.92.92   www.departamentosgn.org

Una vez configurado dicho fichero procedemos a comprobar si funciona correctamente la configuración del servidor.
Accedemos a «www.iesgn.org»:

Selección_016

Accedemos correctamente a la página del virtual host configurado en nuestro servidor. Ahora accedemos a «www.departamentosgn.org»

Selección_015

Nuestro servidor web está configurado correctamente ya que se puede acceder a los 2 sitios alojados en el mismo servidor.

4. Modifica la configuración del servidor para que la segunda página sólo sea accesible desde el puerto 8080.

Modificamos el fichero de configuración del sitio «departamentos», lo cambiamos de tal forma que funcione por el puerto 8080 en la linea «<VirtualHost *:80>» cambiamos «80» por «8080».

El fichero quedará así:

<VirtualHost *:8080>
        ServerAdmin webmaster@localhost
        ServerName www.departamentosgn.org
        DocumentRoot /srv/www/departamentos
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /srv/www/departamentos>
                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
</VirtualHost>

Añadimos al archivo «ports.conf» las siguientes lineas para que el servicio web escuche en el puerto 8080:

NameVirtualHost *:8080
Listen 8080

Una vez realizados estos cambios accedemos al sitio «www.departamentosgn.org»

Selección_017

Observamos que se accede a la página principal del sitio «iesgn» ya que es el único sitio accesible por el puerto 80 con la ip asociada en el fichero «/etc/hosts». Para arreglar esto habilitamos de nuevo el sitio por defecto «default» y lo dejamos con la siguiente configuración:

 <VirtualHost *:80>
        ServerName departamentosgn.org
        ServerName www.departamentosgn.org
        ServerSignature On
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>
<VirtualHost *:8080>
        ServerName iesgn.org
        ServerName www.iesgn.org
        ServerSignature On
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

Ahora modificamos el fichero «index.html» de  «/var/www/» y lo modificamos para que se informe de un error.

Si accedemos a «www.departamentosgn.org:8080» nos devuelve la página correspondiente al sitio «departamentos».

Selección_019

Si accedemos a «www.departamentosgn.org» nos devuelve un error: Selección_024

5. Cambia la configuración del sitio web www.iesgn.org para que se comporte de la siguiente forma:

  • Cuando se entre a la dirección www.iesgn.org se redireccionará automaticamente a www.iesgn.org/principal, donde se mostrará el mensaje de bienvenida. En el directorio principal no se permite ver la lista de los ficheros, no se permite que se siga los enlaces símbolicos y no se permite negociación de contenido.

Creamos un nuevo directorio en «/srv/www/iesgn» llamado «principal».
Movemos el archivo «index.html» que se encontraba en el directorio de «iesgn» al nuevo directorio «principal».
Una vez realizados estos pasos procedemos a modificar el fichero de configuración del sitio «iesgn», en el que añadiremos la redirección a «www.iesgn.org/principal», añadimos lo siguiente:

RedirectMatch permanent ^/$ http://www.iesgn.org/principal

Para que esto funcione tenemos que tener activado «mod_alias», en caso de no tenerlo activado podemos activarlo con:

a2enmod alias

Ahora procedemos a modificar la configuración del directorio «principal», para ello añadimos lo siguiente:

 <Directory srv/www/iesgn/principal>
         Options Indexes FollowSymLinks MultiViews
         AllowOverride None
         Order allow,deny
         allow from all
 </Directory>

Para prohibir ver la lista de ficheros, los enlaces simbólicos y la negociación de contenido en el direcotrio principal debemos modificar  las opciones del directorio «/srv/www/iesgn».
Modificamos las opciones «Indexes», «FollowSymLinks» y «MultiViews»:

  • Indexes -> Si una URL solicita un directorio y no existe DirectoryIndex en ese directorio, el servidor devolverá una lista del contenido del directorio.
  • MultiViews -> Se permiten mostrar contenido negociado en función de diversos valores.
  • FollowSymLinks -> El servidor seguirá los enlaces simbólicos. Tener esta opción activa aumenta el rendimiento ya que el servidor no comprueba si un fichero o directorio es un enlace simbólico y es má rápido, pero en algunos casos puede presentar problemas de inseguridad.

Para quitar estas opciones bastará con añadir un menos ««, delante de la opción, ejemplo:

Options -Indexes -FollowSymLinks -MultiViews

La configuración del directorio será la siguiente:

 <Directory /srv/www/iesgn>
         Options -Indexes -FollowSymLinks -MultiViews
         AllowOverride None
         Order allow,deny
         allow from all
 </Directory>

Con esto hemos prohibido ver la lista de ficheros, los enlaces simbólicos y la negociación de contenido.

  • Si accedes a la página www.iesgn.org/principal/documentos se visualizarán los documentos que hay en /srv/doc. Por lo tanto se permitirá el listado de fichero y el seguimiento de enlaces símbolicos siempre que sean a ficheros o directorios cuyo dueño sea el usuario.

Creamos un nuevo directorio «/srv/doc» y modificamos su propietario con «chown -R www-data:www-data /srv/doc» . Creamos un fichero «prueba» para ver que todo funcione correctamente.

Procedemos a modificar el fichero de configuración del sitio «iesgn», tendremos que crear un alias para «/principal/documentos» en el que se muestre el directorio «/srv/doc». Para que se permita ver el listado de ficheros tenemos que añadir la configuración del directorio elegido y añadir las opciones «Indexes» y «SymLinksIfOwnerMatch» que sirve para seguir un enlace simbólico sólo si los propietarios del enlace y del destino coinciden.

Por lo que para aplicar toda la configuración dememos añadir lo siguiente:

Alias /principal/documentos/ /srv/doc/
 <Directory /srv/doc/>
               Options +Indexes +SymLinksIfOwnerMatch
              AllowOverride None
              Order allow,deny
              allow from all
 </Directory>

Ya tenemos nuestra nueva configuración realizada, accedemos al navegador a la url  «www.iesgn.org/principal/documentos»:

Selección_020Todo está configurado correctamente ya que vemos el contenido del directorio «/srv/doc».

  • En todo el host virtual se debe redefinir los mensajes de error de objeto no encontrado y no permitido. Para el ello se crearan dos ficheros html dentro del directorio error.

Creamos un directorio llamado error  en la ubicación «/srv/error» y le damos los permisos pertinentes.  Dentro de él, creamos 2 ficheros llamados «objetonoencontrado.html» y «objetonopermitido.html» y los modificamos de tal manera que se informe del tipo de error que se nos devuelve.

Ahora tenemos que añadir a la configuración del sitio que cuando haya un error especificado se muestre la página que hemos creado. La lista de errores es la siguiente:

  • 400 Bad syntax (Error de sintaxis)
  • 401 Unauthorized (Acceso no autorizado, el usuario debe autentificarse)
  • 403 Forbidden (Acceso Prohibido)
  • 404 Not Found (No Encontrado)
  • 405 Method not allowed (Modo no permitido)
  • 500 Internal Error (Error Interno)
  • 501 Not Implemented (No Implementado)
  • 502 Overloaded (Sobrecargado)
  • 503 Service Unavailable (Servicio no disponible)
  • 504 Gateway Timeout (Gateway Fuera de Tiempo)
  • 505 HTTP Version not supported (Versión de HTTP no Soportada)

En nuestro caso los tipos de errores para los que hemos creado las páginas son los errores «404» y «403», por lo que añadiremos lo siguiente:

 Alias /error /srv/error
 ErrorDocument 404 /error/objetonoencontrado.html
 ErrorDocument 403 /error/objetonopermitido.html

Probamos si funciona la nueva configuración accediendo a una página que no existe en nuestro sitio.

Selección_021La nueva configuración funciona correctamente.

  • Como el insitituto es bilingüe, en la URL www.iesgn.org/principal/internacional, debe existir dos mensajes de bienvenida: en inglés y en español, por lo tanto se debe permitir la negociación de contenidos. Realiza una prueba de funcionamiento, donde se demuestre que se ha accedido a la web desde un navegador con el español como idioma configurado, y que se accedido con el inglés.

 Creamos el directorio llamado internacional  en la ubicación «/srv/www/iesgn/principal/internacional» y le damos los permisos pertinentes.  Dentro de él, creamos 2 ficheros llamados «index.html.es» e «index.html.en» y los modificamos dando la bienvenida en el idioma que estemos configurando en cada fichero.

Una vez creados estos ficheros procedemos a modificar el fichero de configuración del sitio para añadir la configuración del nuevo directorio y permitir la negociación de contenido. Para ello debemos añadir:

 <Directory /srv/www/iesgn/principal/internacional>
            Options +MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
 </Directory>

Ahora añadimos las siguientes lineas para añadir los lenguajes elegidos y también la prioridad de lenguaje,en caso de que el navegador del cliente tenga un idioma diferente a los disponibles se le mostrará el idioma con mayor prioridad. Como el idioma internacional es el inglés pondremos el inglés en primer lugar.

       AddLanguage es .es
       AddLanguage en .en
       LanguagePriority en es

Reiniciamos apache2 y configuramos Iceweasel para que su idioma principal sea el inglés, accedemos a «www.iesgn.com/principal/internacional»:

Selección_022

Accedemos a la misma url desde un navegador con idioma principal en español:

Selección_023

Todo lo configurado funciona correctamente, por lo que el fichero de configuración de «iesgn» tras todos estos pasos es el siguiente:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.iesgn.org
        DocumentRoot /srv/www/iesgn
        RedirectMatch permanent ^/$ http://www.iesgn.org/principal
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /srv/www/iesgn>
                Options -Indexes -FollowSymLinks -MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        <Directory /srv/www/iesgn/principal>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        AddLanguage es .es
        AddLanguage en .en
        LanguagePriority en es
        <Directory /srv/www/iesgn/principal/internacional>
                Options +MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        Alias /principal/documentos /srv/doc/
        <Directory /srv/doc/>
                Options +Indexes +SymLinksIfOwnerMatch
                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>
        Alias /error /srv/error
        ErrorDocument 404 /error/objetonoencontrado.html
        ErrorDocument 403 /error/objetonopermitido.html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        # Possible values include: debug, info, notice, warn, error, c$
        # alert, emerg.
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.