Apache 2.2: servidor web |
SOFTWARE - Servidores | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Astelehena, 2008(e)ko apirila(r)en 21-(e)an 19:10etan | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There are no translations available. En el artículo presentamos las principales características y funcionalidades de este potente servidor web, en su versión 2.2 y en entorno Ubuntu. Apache 2.2: servidor web1 IntroducciónApache 2.2 es un servidor web de software libre desarrollado por la Apache Software Foundation (http://www.apache.org/) cuyo objetivo es servir o suministrar páginas web (en general, hipertextos) a los clientes web o navegadores que las solicitan. En el artículo presentamos las principales características y funcionalidades de este potente servidor web, en su versión 2.2 y en entorno Ubuntu. 2 Apache 2.2La arquitectura utilizada es cliente/servidor, es decir, el equipo cliente hace una solicitud o petición al equipo servidor y éste la atiende. En el equipo cliente se ejecuta una aplicación llamada 'navegador o cliente web' que:
El protocolo utilizado para la transferencia de hipertexto es HTTP (HiperText Transfer Protocol) que está basado en el envío de mensajes y establece el conjunto de normas mediante las cuales se envían las peticiones de acceso a una web y la respuesta de esa web. HTTP es un protocolo sin estado, es decir, no recuerda nada relativo a conexiones anteriores a la actual. La conexión sólo tiene la duración correspondiente a la transmisión de la página solicitada si la encuentra, y si no la encuentra devuelve un código de error. El servidor web Apache 2.2 proporciona contenidos al cliente web o navegador como:
Su curioso nombre hace referencia a sus orígenes. Cuando el proyecto inicial (Centro Nacional de Actividades de Supercomputación, NCSA, Universidad de Illinois) fue abandonado por su principal desarrollador, Rob McCool, diferentes webmasters comenzaron a desarrollar 'parches' para el código fuente de este servidor inicial y mediante el correo electrónico sincronizaban sus aportaciones. De esta forma apareció el proyecto Apache, cuyo nombre se debe a: A PAtCHy server. La primera versión de Apache es la 0.6 en 1995, y en la actualidad la versión disponible es la 2.2 (http://httpd.apache.org/docs/2.2/en/). 3 Instalación. Arranque y parada.La instalación la realizamos desde el entorno gráfico utilizando la herramienta Synaptic (Sistema -> Administración -> Gestor de paquetes Synaptic). Marcamos para instalar los paquetes siguientes: apache2, apache2.2-common, apache2-mpm-worker y apache2-utils. Aplicamos los cambios y hacemos un seguimiento de la instalación desplegando la pestaña Detalles. La versión que se instala es la 2.2.3. Si todo ha ido bien al abrir el navegador web Firefox (Aplicaciones -> Internet -> ) e ir a http://localhost deberá aparecer una página indicando que el servidor Apache2 está instalado y ejecutándose. Si se dispone de un nombre de dominio cualificado que se puede resolver mediante DNS o localmente con el archivo /etc/hosts, podemos utilizarlo para invocar al servidor desde el cliente web. Podemos hacer una comprobación de que realmente está ejecutándose el servidor web Apache 2.2 ejecutando en una terminal la orden siguiente:
Deberán aparecer los procesos lanzados por Apache y que están escuchando en el puerto 80 las peticiones de los clientes. Desde el entorno gráfico ir a Sistema -> Administración -> Monitor del sistema Por defecto, al entrar en esta aplicación se muestran los procesos correspondientes al usuario que la ha lanzado. Para ver todos los procesos del sistema abrir la lista desplegable 'Ver' y seleccionar la opción correspondiente. Las opciones disponibles sobre el proceso seleccionado se muestran pulsando el botón derecho del ratón estando sobre dicho proceso. Para arrancar/parar/reiniciar/forzar a Apache ejecutar como root la orden:
La diferencia básica entre las opciones restart y force-reload es que con restart se está reiniciando completamente el servicio, sin embargo con force-reload sólo se está obligando a Apache a releer sus archivos de configuración. 4 Configuración básicaEl archivo de configuración de Apache 2.2 en Ubuntu es /etc/apache2/apache2.conf. Es un archivo muy extenso en el que todas las directivas disponibles están explicadas, incluyendo ejemplos de utilización. Contiene una directiva por línea y no se hace distinción entre mayúsculas y minúsculas. Las líneas que comienzan con el carácter '#' se consideran comentarios. En http://httpd.apache.org/docs/2.2/en/mod/quickreference.html existe una guía completa de las directivas disponibles. Para el artículo sólo se van a comentar aquellas directivas que se utilizen en los ejemplos de configuración. En el archivo de configuración existen secciones de configuración que agrupan directivas y que pueden ser de dos tipos:
Como ejemplo se incluye esta sección Directory tomada del archivo /etc/apache2/apache2.conf
Que indica que el directorio /var/www/ (origen por defecto de los contenidos web) está configurado para permitir el acceso a cualquier máquina del dominio dominio.com excepto al host pc01. Dentro del directorio /etc/apache2/ existen otros archivos y directorios de configuración:
Por ejemplo, se puede crear un archivo dentro de este directorio llamado alias que contenga todos los alias creados por el administrador. Se utilizan los Alias para asociar direcciones URL con directorios que no pertenecen al directorio origen por defecto (/var/www/).
- EL archivo .load contiene directivas de configuración de Apache necesarias para la carga del módulo en cuestión. Ejemplo: userdir.load - El archivo .conf contiene directivas de configuración necesarias para la utilización del módulo en cuestión. Ejemplo: userdir.conf
5 Utilización de módulosUno de los principales motivos por los que se utilizan los módulos en Apache2 es que no todas las instalaciones de servidores web necesitan las mismas funcionalidades. Al modularizar cada servidor web incluye sólo aquello que necesita consiguiendo que el servicio sea mas ligero. Existen dos tipos de módulos:
El mecanismo para activar un módulo de Apache2 disponible en el directorio /etc/apache2/mods-available/ consiste en ejecutar como root (o un usuario sudo) la orden a2enmod sobre él.
En concreto uno de los módulos mas utilizados es el que acabamos de activar, userdir, cuya misión es permitir que cualquier usuario del servidor pueda crear su espacio web en un directorio o carpeta dentro de su cuenta. Es decir, permite asociar sitios con los usuarios del sistema. La directiva UserDir disponible para este módulo indica el nombre del subdirectorio, dentro del directorio home de cada usuario, donde estarán los archivos HTML que podrán ser servidos por Apache2. Por defecto el subdirectorio es public_html.
Esta directiva irá incluida en el archivo de configuración por defecto para este módulo /etc/apache2/mods-available/userdir.conf:
La sección <IfModule> anterior:
Si usuario1, usuario2,... son usuarios que tienen login en el sistema podemos poner el carácter '~' en los caminos de las URLs. Por ejemplo si escribimos:
se accede al home del usuario usuario1 y no al directorio /var/www/ al que accederíamos si pusiésemos sólo servidor.apache2.com. Si se quiere acceder a la página web sin necesidad de utilizar el carácter '~' habrá que definir un alias en /etc/apache2/conf.d/alias.
6 Archivos .htaccessLos archivos .htaccess permiten a los usuarios que no tienen permisos modificar la configuración y así poder ejercer algún control sobre el comportamiento de su parte del servidor Apache2. Las directivas que modifican el comportamiento se colocan en un archivo .htaccess situado en el directorio al que tiene que afectar, junto a todos sus subdirectorios. El archivo .htaccess se carga cada vez que se solicita un documento. Las modificaciones introducidas no requieren reiniciar el servidor web. Para que el servidor haga caso de los archivos .htaccess hay que incluir la directiva AllowOverride (permite sobreescritura) dentro de la sección <Directory> que interese. Si se quiere deshabilitar completamente la utilización de estos archivos hay que incluir la directiva:
La directiva AccessFileName permite modificar el nombre de este archivo, cuyo valor por defecto es .htaccess. En el archivo de configuración /etc/apache2/apache2.conf encontramos:
Los motivos fundamentales para no permitir (o no recomendar) la utilización de archivos .htaccess son los siguientes:
7 Hosts virtualesTrabajar con Hosts Virtuales consiste en ejecutar más de un sitio web en el mismo servidor. Mediante los hosts virtuales, Apache2 permite la posibilidad de alojar varios dominios en una sola máquina. De esa forma, cuando una petición entra en el servidor Apache2 desde un navegador web a través de una IP dada, Apache2 comprueba el nombre de dominio que se está solicitando y muestra el contenido asociado a dicho nombre de dominio. La utilización de hosts virtuales tiene como ventajas la versatilidad para crear diferentes sitios web configurables; el precio, ya que se necesita sólo una máquina para alojar varios servidores web; una configuración del sistema sirve para todos los servidores web; se actualiza sólo una vez y no requiere ningún software ni hardware adicional. Apache soporta dos tipos de hosts virtuales:
Para la definición de hosts virtuales se utiliza la sección <VirtualHost> y en ella se incluyen las directivas que se aplican a un determinado host virtual. Como mínimo debe incluir la directiva DocumentRoot y ServerName. 7.1 Host virtual basado en nombre Para usar hosts virtuales basados en nombres se debe especificar en el servidor qué dirección IP se va a usar mediante la directiva
el '*' indica que el servidor acepta todas las solicitudes entrantes. ¿Cómo sabe Apache2 si una petición va dirigida a uno u otro host virtual? La respuesta está en las cabeceras del HTTP/1.1. Cuando un navegador envía una petición al servidor usando el protocolo HTTP/1.1 envía una cabecera del tipo host: nombre_de_un_host con la que Apache2 puede diferenciar las peticiones de los distintos hosts virtuales. El siguiente paso es crear un bloque
Dentro de cada grupo Como ejemplo de utilización añadimos un host virtual a un servidor web ya existente. Suponemos que el servidor web existente (host virtual por defecto) dispone de su configuración como host virtual en el archivo /etc/apache2/sites-available/default. Supongamos que ya se está sirviendo el dominio Para preparar el nuevo sitio virtual habrá que:
Si el aula dispone de servicio DNS se configura para que ambos dominios servidor.dominio.com virtual.dominio.com) apunten a la misma dirección IP. Esto se hace mediante el tipo de registro CNAME (nombre canónico).
7.2 Host virtual basado en IP Si se tiene un sistema que dispone de varias direcciones IP y se quiere que cada una de ellas soporte un sitio web se deberá crear una sección virtual para cada dirección IP. En este caso los servidores virtuales definidos reciben las solicitudes en función de la IP requerida, no del nombre del servidor. Si no se dispone de un equipo con varias interfaces de red se puede probar creando alias de la tarjeta disponible. Para ello hay que editar el archivo /etc/network/interfaces y añadir la porción de código siguiente adecuando los datos al aula:
Se está creando un alias de la tarjeta ethernet eth0 y se le asigna la IP 192.168.1.2. Se supone que la tj eth0 tiene IP 192.168.1.1. A partir de este momento el sistema ya dispone de 2 interfaces de red, una real y un alias que permite definir un host virtual alojado en el mismo servidor web, además del dominio inicial servidor.dominio.com. La configuración para el host virtual virtual.dominio.com es la siguiente y podría ser incluida tanto en el archivo default como en un archivo diferenciado dentro de sites-available:
También es posible configurar hosts virtuales mixtos, es decir basados en nombres y en IP. 7.3 Host virtual basado en puertos Vamos a suponer que, para una misma dirección IP, el servidor web quiere mostrar diferente contenido según el puerto en el que se realiza la conexión HTTP. Para ello habrá que indicar en la sección <VirtualHost> y en NameVirtualHost el puerto asociado y todos los puertos utilizados para atender peticiones deben estar Listen.
En este caso el acceso al servidor web, si se llama igual, debe incluir el puerto por el cual se realiza la petición HTTP. En la URL habrá que escribir: http://servidor.dominio.com:443/Si se utiliza un puerto diferente al 80 (por defecto) hay que revisar el archivo /etc/apache2/ports.conf e incluir las líneas Listen correspondientes a los nuevos puertos de escucha de Apache2. 8 Autenticación y control de accesoRespecto al proceso de Autenticación de usuarios en Apache 2 existen dos métodos:
Estos dos métodos sólo autentican al usuario cuando intenta acceder a un recurso. Pero en ninguno de los dos métodos los datos que a continuación se envían del navegador web al servidor o viceversa van cifrados. Son métodos que controlan el acceso a los recursos, pero no protegen la información intercambiada en la comunicación cliente-servidor una vez se ha comprobado que el acceso es válido. 8.1 Autenticación básica El módulo que controla este método de autenticación es mod_auth_basic y tiene la ventaja de que está soportado por todos los navegadores web. Por el contrario, tiene el inconveniente de que el login y la contraseña no van cifradas del navegador web al servidor. En el archivo /etc/apache2/sites-available/default, o en el archivo relativo al host virtual correspondiente, habrá que añadir un bloque <Directory>...</Directory> por cada directorio que se quiera proteger:
Donde:
Para crear usuarios para el método de autenticación Básico se utiliza la orden htpasswd.
La opción -c permite crear el archivo .htpasswd con el primer usuario dado de alta, que además no tiene porque ser un usuario existente en el sistema. Los permisos del archivo .htpasswd deben ser 644, es decir lectura y escritura para el dueño, que es root y lectura para el grupo y los otros. Para seguir dando de alta usuarios no hay que poner el argumento -c de lo contrario creará siempre de nuevo el archivo con sólo el último usuario incorporado. Los usuarios creados para Apache2 no tienen porque estar dados de alta en el sistema, y si existen no tienen porque tener la misma contraseña. Al ir a la URL http://servidor.dominio.com/privado/ aparece la ventana: 8.2 Autenticación HTTP Digest El módulo que controla este método de autenticación es mod_auth_digest. Tiene la ventaja de que el login y la contraseña van cifradas del navegador web al servidor. Por el contrario, tiene el inconveniente de que no está soportado por todos los navegadores web. Lo primero que hay que hacer es activar dicho módulo. Para ello:
Utiliza MD5 (Message Digest Authentication) para generar un hash que es el que se transmite o envía al servidor. En el archivo /etc/apache2/sites-available/default habrá que añadir un bloque <Directory>...</Directory> por cada directorio que queramos proteger:
Donde: AuthName: indica el nombre del dominio de autenticación (realm). AuthType: indica que el método a usar es 'Digest'.> AuthDigestProvider: indica el soporte utilizado para la autenticación. Por defecto es file (archivo). AuthDigestDomain: dominio protegido con autenticación digest. AuthUserFile: indica donde se encuentra el archivo de contraseñas que ahora llamamos .htdigest. La creación de usuarios en el método de autenticación Digest requiere la orden htdigest.
El parámetro 'zona_privada' debe coincidir exactamente con el nombre del dominio de autenticación dado en la directiva AuthName ya que, cuando se crea un usuario, se hace incluyéndolo a un dominio de autenticación concreto. Si la directiva Require indica 'valid-user', se consideran usuarios válidos sólo los que pertenecen al dominio de autenticación dado en AuthName y las contraseñas sólo pueden utilizarse en este dominio. En el ejemplo añadimos el usuario usuario1 al archivo de contraseñas /etc/apache2/passwd/.htdigest. Si se utiliza el archivo .htdigest por primera vez y no existe, hay que incluir la opción -c:
En el archivo de configuración /etc/apache2/sites-available/default hay que añadir un bloque <Directory>...</Directory> para el directorio que queremos proteger:
Ir a la URL http://servidor.dominio.com/privado/ y aparece la ventana siguiente: Como se puede observar la ventana de identificación es igual a la anterior con la salvedad de que los datos enviados a través de ella están encriptados. 8.3 Control de acceso Es posible permitir el acceso a los usuarios en función de la máquina desde la que hacen las solicitudes de información. En este caso se utilizan las directivas Relacionada con ellas está la directiva La sintaxis es:
dirección: dirección IP o nombre de dominio completamente cualificado (o un nombre de dominio parcial). Se pueden dar varias direcciones o nombres de dominio. En el ejemplo siguiente primero se evalúa Deny (from all) y no se permite el acceso a ningún usuario. A continuación se evalúa Allow que permite el acceso sólo a usuarios de host.dominio1.com:
Si se usa sólo la directiva 9 Analizador de logs awstatsDesde Edubuntu vamos a utilizar el analizador de accesos de Apache Awstats (Advanced Web Statistics) cuya página oficial es http://www.awstats.org Awstats soporta cualquier sistema operativo, ya que al estar escrito en Perl es suficiente que el servidor que lo va a interpretar tenga el módulo correspondiente instalado. Puede generar estadísticas en 33 idiomas, entre los cuales se encuentran el castellano. Su funcionamiento se basa en:
9.1 Instalación de awstats La instalación en Edubuntu es:
Los archivos y directorios que instala/crea son los siguientes:
9.2 Configuración de awstats y funcionamiento El archivo de configuración de awstats es Es importante comprobar que se tiene activado el módulo cgid ya que es necesario para el funcionamiento de Awstats. A. Tipo de logs Hay que asegurarse de que el servidor Apache2 'logea' los accesos de manera combinada utilizando la siguiente directiva:
Por otro lado, también hay que asegurarse de que Apache2 hace los logs de la forma que necesitamos. Para ello hemos de comprobar que los logs tienen el siguiente formato:
que se corresponde con una entrada del archivo /var/log/apache2/access.log. Indicamos a Awstats el formato en que están los logs mediante la directiva LogFormat:
Comprobar las siguientes líneas en
B. Idioma Awstats viene preconfigurado para mostrar los logs y estadísticas en inglés. Hay que cambiarlo a castellano. Los archivos de idioma han sido instalados en el directorio /usr/share/awstats/lang/. Comprobamos que en /etc/awstats/awstats.conf está disponible esta ruta que es donde debe buscar los archivos de idioma.
Para que el idioma por defecto sea el castellano, hemos que sustituir el valor de la directiva Lang 'en' por 'es'.
La página que se genera muestra en la parte superior izquierda unas banderas que permiten elegir el idioma que queramos que muestre la página. C. Imágenes Para que las imágenes que contiene la página que se va a generar se vean correctamente, hay que indicarle a Awstats donde están ubicadas. La directiva DirIcons en /etc/awstats/awstats.conf contiene la ruta de las imágenes relativa a la ubicación de la página web. Utilizamos los alias del servidor Apache2. Tenemos que añadir la siguiente línea al archivo de configuración de apache /etc/apache2/apache2.conf o crear un archivo alias en el directorio conf.d/.
y, entonces en la directiva DirIcons escribimos el nombre del alias creado:
D. Intérprete de Perl El archivo awstats.pl necesita del intérprete de Perl para generar las estadísticas de los logs. Hay que asegurarse de que está bien configurado indicando al script en Perl donde se encuentra el intérprete. La primera línea del archivo
E. Dominio del sitio Como en un mismo host pueden existir distintos dominios (hosts virtuales), la directiva SiteDomain indica a cuál de esos dominios nos estamos refiriendo. En nuestro caso:
F. Formato del informe Indicamos con la directiva LogType el tipo de archivo que contendrá el informe generado:
W indica informe web M para archivos mail F para archivos de log FTP Con esto quedaría finalizada la configuración básica de Awstats. Para visualizar la página web generada ir a http://servidor.apache2.com/cgi-bin/awstats.pl. Como puede observarse las estadísticas están vacías. Eso es así porque awstats.pl no lee los datos de los logs directamente sino que genera un archivo de texto y muestra los datos a partir de dicho texto. Los archivos de texto generados se encuentran en:
Para generar estos archivos por primera vez o actualizarlos manualmente, ejecutamos el archivo awstats.pl con los siguientes parámetros:
Volver a ir al navegador y comprobar que cambian las estadísticas y aparecen ya datos. La versión de este paquete de Awstats instala una entrada en el demonio de cron (
Y si vemos el contenido del archivo:
El archivo de cron nos dice que el usuario 'www-data' actualiza el 'awstats.pl' cada 10 minutos, y toda la "basura" que quiera sacar por pantalla la redirija a la papelera /dev/null. 10 Conclusión
NOTAS 1)Si en el archivo /etc/apache2/sites-available/default existen varias entradas <VirtualHost> por defecto las páginas que se mostrarán son las del primer host virtual de la lista. Es importante entonces que, si se dispone deun servidor 'oficial' con varios hosts virtuales esteservidor 'oficial' también aparezca como <VirtualHost> y esté en primer lugar. |