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»:
Guardamos los cambios y accedemos desde el navegador a la ip de la máquina vagrant:
El 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:
- 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.
- 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í:
Fichero «index.html» de la página de iesgn:
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»:
Accedemos correctamente a la página del virtual host configurado en nuestro servidor. Ahora accedemos a «www.departamentosgn.org»
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»
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».
Si accedemos a «www.departamentosgn.org» nos devuelve un error:
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»:
Todo 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.
La 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»:
Accedemos a la misma url desde un navegador con idioma principal en español:
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>