Capítulo 15. Servicios Web en máquinas
virtuales
15.1. Objetivos
Explorar más formas de hacer aplicaciones Web usando las máquinas virtuales. Para ello debe
arrancar las dos, poner los servidores en la máquina servidora y probarlos con un navegador desde la
estación de trabajo.
15.2. Servidor web autónomo
• Si no lo hizo ya, pruebe el servidor web la práctica de comunicaciones webstiempo2 en la
máquina servidora con un navegador en la estación de trabajo1.
15.3. Servidor web estático
• Vamos ahora a usar el servidor web de verdad, para que haga lo que queremos, sin ocuparnos de la
gestión. Ponga un página estática en /var/www/index.html con tres páginas hijas (similar al
servidor web navegable webstiempo2.c, salvo que todos los ficheros deben tener extensión html y
la información es estática). El servidor web las pondrá visibles en el puerto 80. Compruébelo. Para
no perder tiempo, puede encontrar un ejemplo en ejemplos/var/www/index.html,
ejemplos/var/www/nombre.html, ejemplos/var/www/maquina.html y
ejemplos/var/www/tiempo.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head> <title>Servidor web practicas de ARQO</title> </head>
<body>
<ul>
<li><a href="nombre.html">Usuario</a></li>
<li><a href="tiempo.html">Fecha y hora</a></li>
<li><a href="maquina.html">Maquina</a></li>
</ul>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head> <title>Servidor web practicas de ARQO: maquina</title> </head>
<body> <h1>colibri</h1> </body>
</html>
1
Capítulo 15. Servicios Web en máquinas virtuales
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head> <title>Servidor web practicas de ARQO: tiempo</title> </head>
<body><h1>Wed Jan 12 12:24:01 2011 </h1> </body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head><title>Servidor web practicas de ARQO</title> </head>
<body><h1>Joaquin Seoane„,</h1> </body>
</html>
Recuerde que en la práctica 5 en la sección 5.11 se explica cómo montar el directorio que contiene la
documentación de las prácticas en su máquina virtual en el directorio /casa. Compartir la carpeta es
la solución que menos espacio en disco ocupa y la recommedada.Si no ha realizado este paso, pero sí
ha configurado la red según la práctica 14, puede copiar la documentación de esta práctica con la
siguiente orden: scp -r
[email protected]:/home/lola/practicas ., sustituyendo
lola por el nombre de su usuario y l124 por la máquina desde la que esté trabajando.
15.4. Páginas dinámicas
• Para hacer páginas dinámicas, puede hacer un CGI, que es un programa que recibe información
por variables de entorno y conversa por su salida y entrada estándar, sin preocuparse de las
comunicaciones. En nuestro caso los programas deben estar en /usr/lib/cgi-bin. Los URL
son de la forma http://maquina/cgi-bin/programa?pregunta. Antes de nada vamos a ver
qué valen esas variables de entorno. Para ello podemos usar el programilla de shell que las saca en
texto plano
entorno.sh:
#!/bin/bash
echo "Content-Type: text/plain"
echo
echo Hola, el entorno es:
echo
printenv
o uno que las saca en HTML:
entornohtml.sh:
#!/bin/bash
echo "Content-Type: text/html"
echo
echo ’<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head> <title>Entorno</title> </head>
2
Capítulo 15. Servicios Web en máquinas virtuales
<body>
<h1>Hola, el entorno es:</h1>’
printenv | while read variable
do
echo "<p>$variable</p>"
done
echo ’
</html>’
</body>
De todas las variables, las que nos interesan son SCRIPT_NAME y QUERY_STRING. Puede, en C,
usarse getenv() para obtenerlas, en lugar de recorrer la lista de variables de entorno. Por ejemplo,
este CGI (cgivars.c) las muestra:
#include "stdio.h"
#include "stdlib.h"
int main(int argc, char **argv, char **envp)
{
printf("Content-Type: text/plain\n\n");
printf("La variable SCRIPT_NAME vale %s\n", getenv("SCRIPT_NAME"));
printf("La variable QUERY_STRING vale %s\n", getenv("QUERY_STRING"));
exit(0);
}
No olvide que cgivars.c hay que compilarlo y hacer ejectutables para todo el mundo los CGI
con
chmod ugo+x entorno.sh entornohtml.sh cgivars
15.5. Ficheros ofrecidos
En el directorio webvm:
• Los ejemplos ejemplos/var/www/index.html, ejemplos/var/www/nombre.html,
ejemplos/var/www/maquina.html, ejemplos/var/www/tiempo.html,
ejemplos/usr/lib/cgi-bin/entorno.sh, ejemplos/usr/lib/cgi-bin/entornohtml.sh,
ejemplos/usr/lib/cgi-bin/cgivars.c.
• El cgi compilado ejemplos/usr/lib/cgi-bin/wcgi.
15.6. Resultados pedidos
Se pide hacer un CGI en C que muestre la información dinámicamente. Para ello limpie
webstiempo.c y cree wcgi.c, del que damos una versión compilada en
ejemplos/usr/lib/cgi-bin/wcgi.
3
Capítulo 15. Servicios Web en máquinas virtuales
Notas
1. Si desea acceder al servidor webstiempo2 desde la máquina anfitriona, recuerde añadir una
nueva redirección mediante VBoxManage y use el puerto elegido al arrancar el servidor de
tiempo. Alternativamente, puede parar el servidor apache ejecutando /etc/init.d/apache2 stop y
arrancar webstiempo2 en el puerto 80, que ya tiene una redirección configurada.
4
Comentarios de: Capítulo 15. Servicios Web en máquinas virtuales (0)
No hay comentarios