Conceptos Básicos Del Servidor Web
Conceptos Básicos Del Servidor Web
Un servidor web es un programa que sirve para atender y responder a las diferentes peticiones de los navegadores, proporcionndo los recursos que soliciten usando el protocolo HTTP o el protocolo HTTPS (la versincifrada y autenticada). Un servidor web bsico cuenta con un esquema de funcionamiento muy simple, basado en ejecutar infinitamente el siguiente bucle: 1. Espera peticiones en el puerto TCP indicado (el estndar por defecto para HTTP es el 80). 2. Recibe una peticin. 3. Busca el recurso. 4. Enva el recurso utilizando la misma conexin por la que recibi peticin. 5. Vuelve al segundo punto. Un servidor web que siga el esquema anterior cumplir todos los requisitos bsicos de los servidores HTTP, aunque slo podr servir ficheros estticos. A partir del anterior esquema se han diseado y desarrollado todos los servidores de HTTP que existen, variando slo el tipo de peticiones (pginas estticas, CGIs, Servlets, etc.) que pueden atender, en funcin de que sean o no sean multi-proceso o multi-hilados, etc. A continuacin se detallan algunas de las caractersticas bsicas de los servidores web, que amplan, obviamente el esquema anterior.
Seguridad y autenticacin
La mayora de los servidores web actuales permiten controlar desde el programa servidor los aspectos relacionados con la seguridad y la autenticacin de los usuarios. Podemos, por ejemplo, tener la siguiente situacin: Directorio del disco /home/apache/html Directorio web /
En este caso, el servidor debera traducir las direcciones web de esta manera: URL /index.html Fichero de disco /home/apache/html/index.html
El modo ms sencillo de control es el facilitado por el uso de ficheros .htaccess. Se trata de un sistema de seguridad que deriva de uno de los primeros servidores web ("NCSA httpd"), que consiste en incluir un fichero de nombre .htaccess en cualquier directorio del contenido web que se deba a servir, indicando en este fichero qu usuarios o mquinas, etc. tienen acceso a los ficheros y a los diferentes subdirectorios del directorio donde est instalado el .htaccess. Como el "NCSA httpd" fue el servidor ms utilizado durante mucho tiempo, la mayora de servidores actuales permiten utilizar un fichero .htaccess respetando la sintaxis original del servidor de NCSA. Hay otros servidores que permiten especificar reglas de servicio de directorios, subdirectorios y ficheros en la configuracin del programa servidor web, indicando qu usuarios, mquinas, etc. tienen acceso al recurso indicado. En cuanto a la autenticacin (validacin del nombre de usuario y la contrasea o clave indicados por el cliente), las prestaciones
ofrecidas por los difernetes servidores web son variopintas. La mayora permite, al menos, facilitar al servidor web un fichero con nombres de usuario y contraseas mediante el cual se pueden validar los datos enviado desde el cliente. De todas formas, es frecuente que los servidores faciliten pasarelas que permiten delegar las tareas de autenticacin y validacin en otro software (como RADIUS, LDAP, etc.). Si se utiliza un sistema operativo como Linux, el cual dispone de una infraestructura para autenticacin como PAM ("pluggable authentication modules"), se puede usar tal funcionalidad como modo de autenticacin del servidor web, permitindo de este modo utilizar los mltiples mtodos disponibles en PAM para autenticar contra diversos sistemas de seguridad.
Contenido dinmico
Uno de los aspectos fundamentales del servidor web elegido es el nivel de soporte que ofrece para servir contenido dinmico. Puesto que la mayor parte del contenido web que se sirve no viene de pginas estticas, sino que se genera de forma dinmica, y esta tendencia se mueve claramente al alza, el soporte para contenido de tipo dinmico que ofrece un servidor web es uno de los puntos crticos en la eleccin. La mayor parte de los servidores web ofrecen soporte para CGI (se debe recordar que los CGI son el mtodo ms antiguo y sencillo para generar contenido dinmico). Otros muchos ofrecen soporte para algunos lenguajes de programacin (normalemente lenguajes interpretados) como PHP, JSP, ASP, etc. Es muy recomendable que el servidor web que vayamos a utilizar proporcione soporte para algunos de estos lenguajes, especialmente PHP, sin tener en cuenta JSP, que normalmente requerir un software externo para funcionar (como un contenedor de Servlets). La oferta es muy amplia, pero antes de elegir un lenguaje de programacin de servidor se debe plantear si se desea un lenguaje muy estndar para que la aplicacin no dependa de un servidor web o una arquitectura concreta o si, al contrario, la portabilidad no es prioritaria y s lo es alguna otra prestacin concreta que pueda ofrecer algn lenguaje de programacin concreto.
Servidores virtuales
Una prestacin que gana aceptacin y usuarios rpidamente, muy especialmente entre los proveedores de servicios de Internet y las empresas de alojamiento de dominios, es la capacidad de algunos servidores web de facilitar mltiples dominios con una nica direccin IP, discriminando entre los diferentes dominios alojados en funcin del nombre de dominio enviado en la cabecera HTTP. Esta prestacin permite la administracin racional y ahorradora de un bien escaso, las direcciones IP. Si se necesitan muchos nombres de servidor (porque proporcionamos alojamiento o por cualquier
otro motivo) debemos asegurarnos de que el servidor web elegido ofrezca esta facilidad y que el soporte que ofrece para servidores virtuales permita una configuracin distinta para cada servidor. Sera perfecto que cada servidor se comportara como si fuese un ordenador diferente.
Prestaciones extra
Son muchas las prestaciones que ofrecen los diferentes servidores web para diferenciarse de la competencia. Algunas son realmente tiles y pueden decidir la eleccin de servidor. Hay que ser conscientes, sin embargo, de que si utilizamos algunas de estas caractersticas, o si stas devienen imprescindibles, ello nos puede ligar a un determinado servidor web e imposibilitar una migracin posterior. Algunas caractersticas adicionales de ciertos servidores web de cdigo libre son:
y
y y y y
y y
Spelling (Apache). Esta prestacin permite definir una pgina de error que se sirve cuando el servidor no ha encontrado el recurso solicitado. Proporciona una pgina web configurable generada por el servidor que muestra, por ejemplo, su estado de funcionamiento o su nivel de respuesta. RXML Tags (Roxen). Aade al lenguaje HTML algunos tags (etiquetas, comandos de HTML), mejorados que permiten generar contenido dinmico. SQL Tags (Roxen). Aade al HTML extendido de Roxen (RXML, antes mencionado), ciertos comandos para acceder a bases de datos SQL desde las pginas HTML. Graphics (Roxen). Aade al HTML extendido de Roxen (RXML, antes mencionado), ciertos comandos para generar grficos, ttulos, etc. Bfnsgd (AOLServer), mod_gd (Apache). Permite realizar grficos partiendo de texto y de fuentes True Type. mod_mp3 (Apache), ICECAST, MPEG (Roxen). Permiten convertir el servidor web en un servidor eficiente de msica (con streaming, etc.). Throttle (Roxen), mod_throttle (Apache). Facilitan herramientas para limitar la velocidad del servicio de HTTP, en funcin del usuario, del servidor virtual, etc. Nsxml (AOLServer), tDOM (AOLServer), mod_xslt (Apache). Permiten transformar ficheros XML a partir de XSL. Kill Frame (Roxen). Enva con cada pgina web un cdigo que evita que la web quede enmarcada (como "frame") dentro de otra pgina web. En cierto modo, evita que nos "roben" nuestra pgina web.
Algunos servidores permiten su uso como servidores intermedios (proxy servers). Se pueden usar los servidores intermedios para diferentes propsitos:
y y
Servir de aceleradores de navegacin (uso como proxy-cach). Servir como aceleradores de acceso frontal para un servidor web, instalando diferentes servidores web que repliquen los distintos accesos a un servidor maestro (reverse-proxy o HTTP server acceleration). Como frontales a algn servidor o algn protocolo.
Ciertos servidores web permiten su uso como servidores intermedios para alguno de los usos mencionados. Sin embargo, para los 2 primeros usos existen programas especficos de cdigo libre que son ms eficientes, entre los que destaca, por ejemplo, Squid que se considera unnimemente como uno de los mejores productos de proxy. Hay mdulos para diversos servidores web que permiten su uso como frontales para otros servidores especializados en otros servicios.
Protocolos adicionales
Algunos servidores, no slo atienden y sirven peticiones HTTP (y HTTPS), sino que pueden servir tambin peticiones basadas en otros protocolos o en protocolos implementados sobre HTTP. Algunos de estos protocolos pueden ser requisitos fundamentales de nuestro sistema (en funcin de nuestras necesidades) y decantar nuestra eleccin de un programa servidor.
Los manuales titulados Introduccin a las aplicaciones web, Instalacin del servidor web y Servicios web han sido extrados, con algunas modificaciones, del manual "Desarrollo de aplicaciones web", publicado por la UOC dentro de su mster de software libre, escrito por Carles Mateu i Piol. El manual tiene licencia GFDL, la cual otorga permiso para copiar, distribuir y modificar el documento segn los trminos de la GNU Free Documentation License, Version 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera.
El servidor de Pginas es la parte primordial de cualquier sitio de Internet, ya que es el encargado de generar y enviar la informacin a los usuarios finales. Cual es la diferencia entre Servidor de Pginas "Web Server" y Servidor de Aplicaciones "Application Server" ? En un sentido muy estricto un "Web Server" no es lo mismo que "Application Server", pero ltimamente estos dos trminos se prestan a una gran confusin . Cuando se crearon los primeros Servidores de pginas ("Web Server") como Apache, ste solo era encargado de enviar los datos al usuario final, pero cualquier otra informacin que requiriera de algn tipo de personalizacin (Vase: aplicacin de servidor ) era realizada por un interpretador que ejecutaba un "script" (programa), generalmente en Perl .Sin embargo, conforme las demandas de los Servidores de pginas ("Web Server's") incrementaron fue necesario eficientizar este proceso, ya que el llamar un interpretador para que ejecutara otro programa (en el caso Perl) pona una demanda muy fuerte sobre el "Host" que mantena el Servidor de Pginas ("Web Server") Hoy en da, se pudiera decir que TODOS los "Servidores de Pginas" ya son "Servidores de Aplicaciones" ya que se les ha desarrollado alguna funcionalidad especial que les permite realizar, valga la redundancia, aplicaciones de servidor . Y para agregar a la confusin en la Industria hoy da ya abundan los "Java Application Servers" que son otra cosa muy diferente y malamente ya son designados "Application Servers" o "Servidores de Aplicaciones" a solas. Dependiendo de la funcionalidad se trae consigo complejidad al sistema, ya sea en la forma de requerimientos del sistema (memoria , procesadores), carga administrativa (configuracin, tiempo de desarrollo) o alguna otra. Requisicin comn:
En el diagrama anterior se puede observar que un navegador ("Netscape" o "Explorer") solicita informacin al servidor de pginas, esta solicitud inicial se lleva acabo mediante HTTP , sin embargo, una vez que esta solicitud llega al Servidor sta puede tomar varias acciones. En el esquema las lineas punteadas ( -- -- ) representan un proceso/programa dentro del "Host" (computadora fsica), bajo esta hiptesis se describirn los "Servidores de Pginas". Apache Apache es uno de los Servidores de pginas ms utilizados, posiblemente porque ofrece instalaciones sencillas para sitios pequeos y si se requiere es posible expandirlo hasta el nivel de los mejores productos comerciales. Si se utiliza para un sitio pequeo que solo contenga archivos en HTML, esto es, no requiera de aplicaciones de servidor su funcionalidad es excelente, pero que sucede cuando se requiere una aplicacin de Servidor ? La aplicacin de servidor implica lo siguiente:
Cuando el servidor de pginas (Apache) recibe la requisicin para "x" pgina ste reconoce cuando debe enviar un documento esttico (HTML) o ejecutar algn tipo de aplicacin, en el diagrama se puede observar que la solicitud
de "x" pgina invoca (llama) un programa en Perl y este a su vez solicita informacin a una base de datos, por lo tanto para llevar acabo esta operacin debieron iniciarse 2 procesos nuevos, quizs esto no sea de gran importancia para un sitio de 100 visitas diarias, pero que sucedera con uno de 2 visitas por segundo ? Si no se tienen los suficientes recursos en cuanto a memoria y procesadores se refiere, seguramente caer el servidor de pginas o bien se queme el "Host" (computadora fsica) por la demanda excesiva. Apache tiene tanto tiempo de desarrollo que han sido desarrolladas diferentes soluciones para evitar estas ineficiencias,algunas: Es capaz de utilizar otros interpretadores y lenguajes como "Tcl", "PhP" y "Python" . Puede conectarse directamente a una Base de datos . Entre otras, posee diversos mdulos que le permiten utilizar una gran gamma de lenguajes y desarrollar funcionalidades avanzadas. Cabe mencionar que muchos sitios de alto trfico an permanecen bajo este tipo de Arquitectura, en ocasiones si se tienen los recursos suficientes continua siendo costeable esta metodologa a migrar a otro tipo de desarrollo, sin embargo, siempre es conveniente conocer otras alternativas. AOLServer AOLServer al igual que Apache es un producto open-source pero a diferencia de este ltimo, fue diseado conociendo varias deficiencias que existan en el modelo inicial utilizado por Apache.
y y
AOLServer desde sus versiones iniciales fue desarrollado con "Threading" en mente, esto es, compartir la memoria del Proceso general en varios subprocesos o "Threads", esto no solo eficientiza las conexiones al servidor de pginas sino tambin reduce la carga sobre el mismo. Adems de "Threading" AOLserver integra un Interpretador en su estructura interna evitando generar un proceso nuevo por aplicacin de servidor y
mantiene grupos de conexiones latentes ("pools") hacia bases de datos tambin para evitar generar procesos nuevos.
Otra ventaja de AOLServer es el ofrecimiento de ADP ("Aol Dynamic Pages") que son muy similares a las ASP's (Active Server Pages) de Microsoft o JSP's (Java Server Pages) de Sun, la diferencia estriba que ADP's utilizan el lenguaje Tcl y un API especialmente diseado para accesar los elementos del servidor, pero su funcionamiento es igual al de ADP y JSP: mezclar elementos de HTML con elementos de programacin para generar contenido dinmico. Como ltimo punto es utilizado por una de las empresas con mayor trfico en Internet America Online, el proveedor de Servicios de Internet (ISP) ms grande del mundo. Un poco ms en Ventajas y Desventajas comparado con Apache IIS (Information Server) IIS es el servidor de pginas desarrollado por Microsoft para Windows NT/2000, a diferencia de los dos servidores de pginas mencionados anteriormente, IIS solo puede operar en plataformas Windows. El punto ms favorable de este servidor son ASP's que facilitan el desarrollo de aplicaciones y la "sencillez" de instalacin, sin embargo, existen alternativas como ADP's de Aolserver y JSP's para Java. Desafortunadamente debido a la presencia de Microsoft en el Mercado seguir siendo necesario interactuar con este producto a pesar de todas sus desventajas: Plataforma: Solo esta disponible para Windows. Historia de Sistemas Operativos para Red y Porque es mas fcil y Econmico configurar Unix que Windows en Red
Costo: Porque pagar licencia si existen productos flexibles y open-source mejores. Confiabilidad: Menos confiable que otros productos , tan confiable que ni sus mejores tcnicos podan utilizarlo cuando se encontraba bajo uno de los tantos ataques que sufren sitios de Internet: 26 de Enero del 2001 http://www.nytimes.com/2001/01/26/technology/26SOFT.html Seguridad: An plagado de fallas en versiones de produccin: 19 de Junio del 2001 http://news.cnet.com/news/0-1003-200-6312870.html Seguridad: Ms fallas en versiones de produccin: 30 de Octubre del 2002 http://www.eweek.com/article2/0,3959,661891,00.asp
Zope : Zope es un servidor de pginas open-source que utiliza Python como su "Scripting Language" y es capaz de accesar un gran numero de bases de datos
"Servlet Engines" y "Java Application Servers" Servlet Engines Quizs el nombre que ms salga a relucir con "Servlet Engines" es Tomcat o Jakarta Apache . Tomcat surgi de Sun Microsystem's cuando desarrollaban un "Servidor de Pginas" que utilizara "Java",y posteriormente cedieron el cdigo fuente a la fundacin Apache. A pesar del nombre Apache-Tomcat; Tomcat no requiere de Apache para su funcionamiento (solo requiere de un JDK ("Java Development Kit") y es aqu donde dista un poco de las previas implementaciones:
En la figura anterior la linea roja demuestra que el Servlet engine (tambin llamado "Web Container") es capaz de responder a requisiciones de Internet, en efecto actuando como "Servidor de Pginas", sin embargo, aunque esto
sea posible la gran mayora de las implementaciones de Servlet Engines no funcionan tan eficiente como un "Servidor de Pginas", es por esto (y otras razones que a continuacin se mencionan) que se opta por utilizar un "Servidor de Pginas" (Apache,Aol,Netscape..) en conjuncin con un "Servlet Engine". La linea verde demuestra la utilizacin de un "Servidor de Pginas" con un "Servlet Engine" (Web-Container), esta implementacin suele utilizarse cuando se requiere utilizar encriptacin o se tiene un sitio que contiene documentos puros en HTML , las cuales son dos areas que un "Servidor de Pginas" supera en desempeo comparado con un "Servlet Engine". La comunicacin entre el "Servidor de Pginas" y el "Servlet Engine" se lleva acabo mediante el protocolo denominado ajp12 y recientemente con su sucesor ajp13 . Que hace el Servlet Engine ? El "Servlet Engine" ofrece un "Ambiente" donde habitan los JSP y Servlets, es ah donde se contemplan una gran cantidad de funcionalidades como: threading, manutencin de sesiones, conectividad con el "Servidor de Pginas", es por esto al "Servlet Engine" tambin se le denomina "WebContainer". Dos "Servlet Engines" (Web-Containers) que estn en amplio uso y son utilizados con "Servidores de Pginas" son: Tomcat y ServletExec, donde el primero es open-source y el ltimo es un producto cerrado; otro "Servlet Engine" es Resin (Open-Source) el cual permite: utilizar JavaScript como "Scripting Language" dentro de JSP's y acceso a XSL una extensin de XML . Como se observa en el diagrama tambin se requiere de un JDK ("Java Development Kit") , el cual llevar acabo la ejecucin de los programas ("Servlets" y "JSP's") en Java; como toda otra implementacin existen diversas versiones de JDK's, esto se debe a que cada JDK debe ser diseado alrededor de un Sistema Operativo (para ser ms exactos es el JVM "Java Virtual Machine" el que debe ser diseado alrededor del Sistema Operativo ), algunos JDK's son: J2SE's (Java 2 Standard Edition) de Sun y JDK's de IBM
Java Application Servers "Java Application Servers" hoy en da ya denominados "Application Servers" ofrecen una manera de Integrar y ofrecer las funcionalidades requeridas por la gran mayora de sistemas empresariales, una de las razones por las cuales el mercado ha sido inundado con estos "Application Servers" es que estn diseados alrededor de J2EE , que es solo un grupo de especificaciones definidas por Sun. Estos "Application Servers" comunmente llamados Middleware se encuentran compuestos de la siguiente manera:
Como su denominacin lo implica ("Middleware") se encuentran en la parte media de una arquitectura de sistema, su flexibilidad reside en la posibilidad de accesar informacin en sistemas empresariales (EIS) como SAP, JdEdwards, bases de datos o alguna aplicacin escrita en COBOL u otro lenguaje. Dependiendo de la empresa que desarrolle el "Application Server" ste puede contener inclusive hasta un "Servidor de Pginas" o algn otro desarrollo propietario, sin embargo, los dos elementos primordiales (aunque no sean comercializados como tal) son el "Servlet Engine" (Web-Container) y "Enterprise Bean Engine" (Bean-Container).
El Servlet Engine (Web-Container) en un "Application Server" realiza las mismas funcionalidades que fueron mencionadas anteriormente.(Ofrecer un ambiente para JSP y Servlets). El "Enterprise Bean Engine" (Bean-Container) ofrece un "ambiente" donde residen EJB's ("Enterprise Java Beans") , es mediante "Enterprise Java Beans" que se ejecuta la lgica de negocios sobre la informacin que reside en los sistemas empresariales ("EIS"). En el "Bean Container" (al igual que en el "Web Container") se contemplan varias funcionalidades: "Pooling" hacia bases de Datos (JDBC),control de transacciones(JTAJTS),conectividad con ERP(Connectors),aplicaciones legacy(CORBA),entre otras cosas. La mayor ventaja de este tipo de arquitectura se debe a la separacin de funcionalidades y uso de protocolos de red como RMI/CORBA , esto facilita que puedan existir 4 o 5 "Hosts" en diferentes regiones geogrficas, cada uno empleando cualquiera de los componentes antes mencionados. Por ltimo, existen diversos "Application Servers" que son denominados "Fully J2EE Compliant" esto indica que cumplen con todas las especificaciones J2EE indicadas por Sun. (Vea J2EE )