You are on page 1of 7

5.1.

Principales ventajas de
Apache

La principal característica y ventaja de Apache es que es un servidor web altamente


configurable con un diseño muy modular, de manera que sus capacidades
se pueden extender enormemente con la creación de módulos con funciones
concretas. Esta orientación permite al servidor ser personalizado de forma muy
precisa, instalado o desinstalando servicios a demanda de los usuarios del mismo,
y que de esta forma sólo estén en marcha aquellas funcionalidades realmente
necesarias. En temas anteriores se ha comentado que el enfoque modular tiene
principalmente dos ventajas:

Un menor consumo de recursos general, al poder desactivar todo lo que


no sea necesario con un «grano» muy fino.
También disminuir la probabilidad de ataques, al reducir la cantidad
de
servicios en marcha que se deben mantener.

La bondad de esta arquitectura es evidente, y las versiones de IIS7 y posteriores


han sido rediseñadas para seguir aún más esta aproximación que su predecesor.
Apache 2 presenta un nivel mayor de modularidad que IIS 6.

Como resultado de esta aproximación, en Apache 2 existen infinidad de módulos


disponibles, todos ellos denominados mod_XXX, donde el nombre XXX designa
el tipo de funcionalidad que está pensado que desempeñen. Ejemplos son
mod_perl, mod_php, etc. El propósito de estos módulos es muy dispar y no es
posible verlos todos durante este curso, dada la cantidad de ellos existente, aunque
si se verán un número representativo de los mismos que cubran las funciones más
importantes.

La existencia de tantos módulos dota a Apache de la capacidad de desempeñar


prácticamente cualquier función que se pueda necesitar. No obstante, como se
ha indicado, solo debe instalarse aquello que realmente vaya a usarse. Si se usa
mal la capacidad de modularización de Apache, se perderán todas sus ventajas y
se puede ocasionar múltiples problemas.

Otras ventajas de este servidor


son:

Apache es gratuito y de código abierto, a diferencia de IIS.


Trabaja de forma muy eficiente con Perl (mod_perl) y PHP
(mod_php), entre otros lenguajes.
Disponible para multitud de sistemas operativos (Linux, Unix,
FreeBSD,
Solaris, Mac OS X, Windows,...), a diferencia de IIS. Apache es el servidor
web mayoritariamente usado en entornos Linux, pero también se puede usar en
sistemas operativos Windows. Además, es una opción perfectamente válida a
IIS en entornos Windows Server, aunque en estos casos hay que considerar el
nivel de integración que ha logrado IIS con diversas partes del sistema operativo,
algo en lo que puede aventajar a Apache en este caso concreto.
A partir de la versión Apache 2.2.22 se mejora el soporte para Windows
en comparación con las versiones anteriores, aumentando en gran
medida su eficiencia bajo este sistema operativo.

El objetivo de este tema no es comparar Apache e IIS y decidir cuál es el mejor, ya


que esta comparación es muy difícil, sino imposible de realizar. La elección de uno
u otro debe responder a criterios como el sistema operativo y versión usados,
funcionalidades a implementar, lenguajes de programación a usar en las webs que
se sirvan (algunos lenguajes están muy vinculados al uso de un servidor concreto),
la naturaleza de la propia aplicación a implementar o bien el framework de
desarrollo empleado para ellas. El servidor debe ser elegido en función de las
aplicaciones que vayamos a servir y nunca debe ser hecho al revés.

Novedades en Apache HTTP Server 2.4


Apache ha ido mejorando con el tiempo. En cada versión de Apache se incluye nuevas
características y mejoras. La última versión de Apache es la 2.4 y en el siguiente enlace
se presentan las principales novedades que incluye esta versión respecto de su
antecesor: http://httpd.apache.org/docs/trunk/new_features_2_4.html

5.2. Características principales de


Apache

A continuación se van a enumerar las principales características del servidor web


Apache, algunas de las cuales ya se han mencionado anteriormente. Muchas de
ellas serán vistas con mayor profundidad más adelante:

Multiplataforma: multitud de sistemas operativos tienen una versión


disponible, a diferencia de IIS.

Gestión avanzada de indexación y alias de directorios.

Negociación avanzada de los contenidos que gestiona el servidor:


se permite manipular los mismos antes o después de servirlos, prohibir
determinados tipos de contenidos, etc.

Sistema de notificación de errores HTTP altamente configurable.

Ejecución SetUID de programas CGI: ejecutar los programas bajo la


identidad del usuario que se desee, permitiendo así un mayor nivel de seguridad.

Manejo de recursos avanzado para procesos hijo que sirven peticiones.


Varios módulos de multiprocesamiento o MPM permiten adaptar el
funcionamiento interno de Apache a las características de un sistema operativo
o una necesidad concreta.

Ocultación avanzada de la estructura física de las webs procesadas,


mediante URL rewriting, usando mod_rewrite: Un modulo complejo de
Apache que permite manipular a nuestro antojo la URL de una web servida.

Posibilidad de chequeo avanzado de sintaxis de la URL, incluyendo


caracteres espurios que son fuentes frecuentes de ataques como SQL Injection,
Command Injection, XSS, etc.

Soporte para HTTP 1.1: esta versión de HTTP permite a un browser mandar
varias peticiones en paralelo a un servidor. Esta versión también está soportada
por IIS y además hay que tener en cuenta lo siguiente:
o No se transmiten todas las cabeceras en cada una de las peticiones.
o Con HTTP 1.0, un browser debía esperar por la respuesta del servidor a
una petición antes de mandar otra.
o HTTP 1.1 supone pues una ventaja de rendimiento, tanto por la
economización a la hora de mandar información como por el hecho de no
tener que soportar tantas esperas.

Configuración simple y potente a través de ficheros: De forma estándar


no se podrá encontrar una GUI de administración, aunque sí que existen
algunas soluciones de terceros (http://www.webmin.com). El fichero de
configuración principal es httpd.conf o apache2.conf según el sistema
operativo. Es un fichero de texto con un formato sencillo y determinado.

Servidor web flexible, pudiendo mover partes de la configuración de Apache


a diversos ficheros. Por ejemplo, se puede aislar la configuración de cada host
virtual (cada web servida por Apache) en un archivo independiente para cada
una, o bien distribuir la configuración de diferentes localizaciones físicas a
ficheros independientes más pequeños y fáciles de manejar que se encuentren
directamente en dichas localizaciones. No es necesario pues concentrar toda la
configuración en un solo archivo de gran tamaño. De esta forma se evita que el
fichero de configuración principal apache2.conf alcance un tamaño demasiado
grande y por tanto sea más complejo de manejar.

El término Virtual Host se refiere a la capacidad de simular la existencia


de mantener más de un servidor en una misma máquina, cada uno sirviendo una
web diferente, diferenciada por su nombre de host o IP.

Soporte avanzado de programas CGI (Common Gateway Interface):


a través de los módulos mod_cgi y mod_cgid.

Soporte de FastCGI: con mod_fcgi se puede crear un entorno FastCGI dentro de


Apache y aumentar el rendimiento de estas aplicaciones.

Soporte para autenticación HTTP: incluyendo autenticación Digest y


Basic.
Mediante módulos adicionales pueden implementarse autenticaciones que
empleen bases de datos, ficheros, sentencias SQL o llamadas a programas
externos sobre un mismo servido.

Servidor proxy integrado: Apache se puede convertir en un caching


(forward) proxy server. Un forward proxy es un servidor intermedio que se
sitúa entre el cliente y el servidor que tiene los contenidos.
Manejo de Log: Apache da una gran flexibilidad para configurar los logs y ver
el status actual del servidor remotamente, con un navegador.

Soporte de Server-SideIncludes (SSI): aumenta la flexibilidad


del desarrollador web al permitir reutilizar código.

Soporte para Secured Socket Layer (SSL): gracias a implementaciones


como OpenSSL y el módulo mod_ssl.

Estas son algunas de las principales características del servidor web Apache que
los convierte en un servidor web robusto, seguro y altamente configurable.

5.3. Arquitect
ura

La versión 2.x hace a Apache más flexible, más portable y más escalable. En
esta sección se detallará solamente los aspectos de dos de las más importantes, ya que
en la sección anterior se han mencionado las principales características y
novedades:

Módulos de Multiprocesamiento.
Filtrado de E/S.

Módulos de Multiprocesamiento
(MPM)

Los MPM son uno de los mayores cambios de las versiones 2.X respecto a las
anteriores. Básicamente son formas de procesar las peticiones que Apache
puede usar, y normalmente suele elegirse la más ventajosa teniendo en cuenta el
sistema operativo donde Apache está funcionando u otros factores de las aplicaciones
web que van a funcionar sobre este servidor. A continuación, se describen brevemente
los MPM disponibles hasta el momento y sus características.

Apache versión 1.x usaba únicamente una arquitectura preforking para atender
las peticiones. Ésta consistía en que un proceso padre hacia fork para generar un
conjunto de procesos hijos, que eran los que finalmente servían las peticiones. El
proceso padre monitorizaba a sus hijos y creaba más, o los destruía, basándose en
la cantidad de peticiones que recibía, regulando así la carga de trabajo en función
del número de peticiones recibido en un momento dado. No obstante, este modelo
tenía el inconveniente de que no funcionaba adecuadamente (por su bajo
rendimiento) en algunas plataformas. Una de ellas era Windows, al no tener
implementado nativamente este modelo de procesos. Por ese motivo, se creó el
concepto de MPM, que está destinado a solventar este problema.

Por tanto, cada MPM es responsable de arrancar procesos del servidor y de servir
peticiones usando procesos hijos o threads, según su implementación. A
continuación se citan algunos de los MPM más importantes disponibles:

El MPM prefork. Copia el modelo de Apache 1.X, creando un pool de procesos


hijos para servir peticiones. Cada proceso hijo tiene un sólo thread, por lo que
si Apache inicia 20 procesos hijos, puede servir 20 peticiones simultáneamente.
En el caso de que ocurra un error grave y un proceso hijo muera, sólo se
pierde una petición: la que está atendiendo el hijo que acaba de cesar la actividad.
Finalmente, cabe decir que el máximo y el mínimo de procesos hijos son
parámetros configurables, permitiendo pues adaptar Apache a las capacidades
de la máquina servidora y también fijarle un máximo de carga. Dentro de estos
parámetros máximo y mínimo el servidor genera más o menos procesos en función
de la carga de trabajo actual.

El MPM worker. Permite a Apache soportar hilos, lo cual es más eficiente en


determinados SSOO. El modelo en sí es idéntico al anterior, aunque cada proceso
hijo tiene un número predefinido de threads y cada thread puede servir una
petición diferente. De este modo, si tenemos 30 procesos hijos x 10 threads /
proceso el servidor podrá servir teóricamente hasta 300 peticiones simultaneas.
Es por tanto un modelo muy escalable. En lo referente a procesos, cabe decir que
éstos mueren o se crean en función del número de threads activos o libres que haya
en un momento dado.

El MPM por hijo. En este módulo de multiprocesamiento se inicia un conjunto


de procesos hijos con un número especificado de hilos. Las sucesivas peticiones
incrementan el número de hilos según sea necesario, ocurriendo también lo
contrario si el número de peticiones disminuye. Existe además un valor máximo
y mínimo, de forma que el número de hilos siempre oscilará entre ambos.

Por otro lado, el número de procesos es estático y cada uno puede ejecutarse
usando un ID de usuario y grupo distinto. Esto permite ejecutar varios sitios web
virtuales bajo distintas identidades de forma segura.

El MPM WinNT. Este MPM es especial para la plataforma Windows (NT, 2000,
2003, 2008,...). Es un módulo multihilo donde Apache creará un proceso padre
y uno hijo, que es el encargado de crear todos los hilos que sirven las
peticiones. Además, este modelo usa algunas funciones nativas de Windows,
aumentando el rendimiento de Apache sobre esta plataforma.

El MPM event. Este MPM es una variante del MPM worker, y ha sido diseñado
para servir más peticiones simultáneas. Su funcionamiento se basa en pasar
una porción determinada del procesamiento de una petición a hilos de soporte
secundarios que se encargarán de tratarla. Esto permite liberar los threads
principales para que acepten nuevas peticiones, ya que ellos delegan el volumen
principal del procesamiento en entidades de proceso auxiliares. La configuración
de este MPM es idéntica a la del MPM en el que se basa.

You might also like