Sie sind auf Seite 1von 304

Curso Mentor Apache

Apache
Unidad 1: Introducción a Apache

 
En este capítulo aprenderás:

el concepto de servidor web y sus funciones.
el origen y evolución del servidor web Apache2 y sus características mas relevantes.
el protocolo HTTP como conjunto de normas que regulan el mecanismo de intercambio de
mensajes entre el servidor web y el cliente web (navegador).
a utilizar los tipos MIME para la interpretación del contenido de los archivos transferidos
entre servidor y cliente.

Material complementario:

1. Actividades de la unidad. Archivo U1_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U1_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf

1 de 31
Curso Mentor Apache

Introducción
Objetivos

Conocer el concepto de servidor web y cuáles son sus funciones.

Conocer los servidores web mas importantes y/o mas utilizados.

Estudiar las características mas relevantes del servidor web Apache.

Conocer el protocolo HTTP, sus funciones y diferentes versiones.

Conocer los tipos MIME y sus funciones.

Conocimientos previos

Es la primera unidad y, por lo tanto, no requiere del alumno ningún requisito previo. Únicamente tener la disponibilidad necesaria
para adquirir los conocimientos teóricos que constituirán la base de todo el curso.
Aunque la unidad parezca muy densa y con mucha información variada, es importante que se asimile correctamente.

Contenidos

Unidad 1: Introducción a Apache
A. Ubuntu y Windows

1. ¿Qué es un servidor web?
1. Objetivo y Esquema de funcionamiento
2. Acceso al servidor web
3. Comparativa entre servidores web
4. Introducción a Apache2
5. Un poco de historia
6. Características generales del servidor Apache 2
7. Apache: servidor web
8. El protocolo HTTP
9. Tipos MIME

B. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 31
Curso Mentor Apache

¿Qué es un servidor web?


Definición

La wikipedia define el servidor web como:
“Un programa que implementa el protocolo HTTP (hypertext transfer protocol). Este protocolo está diseñado para transferir lo que
llamamos   hipertextos,   páginas   web   o   páginas   HTML   (hypertext   markup   language):   textos   complejos   con   enlaces,   figuras,
formularios, botones y objetos incrustados como animaciones o reproductores de sonidos.”

Arquitectura del servidor web

La arquitectura utilizada es cliente/servidor, es decir, el equipo cliente hace una solicitud o petición al equipo servidor, y éste atiende
dicha solicitud.
En el equipo cliente se ejecuta una aplicación llamada 'navegador o cliente web' que:

sirve de interfaz con el usuario: atiende sus peticiones, muestra los resultados de las consultas y proporciona al usuario
un conjunto de herramientas que facilitan su comunicación con el servidor.
se comunica con el servidor web: transmite las peticiones de los usuarios.

En el equipo servidor la única tarea es:

atender las peticiones recibidas desde los navegadores o clientes web y hacerlo de forma eficiente y segura. Este es
el caso de los servidores web seguros que solicitan un nombre de usuario y una contraseña para permitir el acceso sólo a
usuarios registrados y por tanto, con permiso para visualizar la página/s.

Un paso mas en la seguridad proporcionada por los servidores web se basa en el establecimiento de conexiones cifradas con el
navegador. Este nivel de seguridad es básico, por ejemplo, para las transacciones comerciales realizadas desde Internet.

Saber más ... sobre la arquitectura de un servidor web

Busca en la web información general sobre servidores web.

3 de 31
Curso Mentor Apache

Objetivo y Esquema
Objetivo del servidor web

El objetivo de un servidor web es servir o suministrar páginas web a los clientes web o navegadores que las solicitan.
Ejemplo:

1. Un usuario desde el navegador Firefox, al hacer 'click' sobre un enlace a una página web está enviando una solicitud al
servidor web que aloja dicha página para que se la muestre (eso se llama servir la página).
2. El servidor web si la encuentra la envía y si no la encuentra devuelve al cliente un mensaje de error.
3. El cliente cuando recibe la página web interpreta el código HTML mostrando las fuentes, colores, imágenes que la
componen, etc, de forma correcta.

Pero  el  servidor  web,   además   de  servir  páginas   web  HTML  estáticas,   también  permite  la  ejecución  de  una  serie  scripts   en
diferentes lenguajes de programación, que proporcionan dinamismo a las páginas web. Estos lenguajes son: PHP, CGI, applets de
Java, etc.

Esquema

La figura siguiente muestra el esquema de funcionamiento de un servidor web.
En ella observamos los tres elementos básicos que componen las peticiones web dinámicas:

el cliente que hace la petición
el servidor que atiende la petición
y los datos solicitados mediante la petición

4 de 31
Curso Mentor Apache

Saber más ... sobre paǵinas web

1. Para conocer mejor el concepto de página web puedes acceder a http://es.wikipedia.org/


2. ¿Hay alguna diferencia entre página web y sitio web?
En esta referencia http://www.masadelante.com/faqs/sitio-web puedes comprobar la diferencia entre ambos conceptos.

5 de 31
Curso Mentor Apache

Acceso al servidor web


Acceso desde un navegador web

Para que el navegador pueda llegar al servidor web (ya sea en una red local o en Internet) el servidor debe tener asignada una
dirección IP (Internet Protocol) única que identifica el equipo en la red.
Cuando el navegador hace una petición de página al servidor web utiliza un nombre que identifica al servidor y esta solicitud se
transmite a un servidor DNS. Éste resuelve el nombre y devuelve la dirección IP que corresponde al nombre.
La solicitud del navegador, entonces, se encamina al servidor web correcto.
La  información  que  el  usuario  proporciona  al  navegador  para  conectar  con  un  servidor  web  se  llama  URL   (Uniform  Resource
Locators).
Una URL de solicitud de un recurso consta de:

1. Protocolo a utilizar: http, https, ftp, ftps,...
2. // : hace las veces de separador
3. Servidor: es la dirección IP o el nombre del servidor (FQDN) que contiene el recurso.
4. Ruta_al_recurso: directorio y subdirectorios del sitio web donde está ubicado el recurso
5. Recurso: recurso al que se quiere acceder.

Por lo tanto una URL indica la forma de acceder a un recurso utilizando un determinado protocolo de comunicación.
Por ejemplo: la URL http://recursostic.educacion.es/observatorio/web/es/home 

Saber más ... sobre algunos términos

FQDN (Fully Qualified Domain Name, Nombre de dominio totalmente cualificado) es un nombre que incluye el nombre del equipo y
el nombre del dominio asociado a esa máquina

6 de 31
Curso Mentor Apache

Comparativa entre servidores web


Comparativa

Existen multitud de servidores web, pero los dos mas conocidos e importantes por sus niveles de implantación son Apache e IIS
(Internet Information Service).
Normalmente  se  asocia  Apache  a  entornos  Unix/GNU  Linux  (existen  versiones  de  Apache  para  Windows)  y  IIS   para  entornos
Windows (no existen versiones para GNU Linux).
Sin entrar en detalles de las características técnicas se puede decir que:

Apache IIS

Es software libre Es software propietario (Microsoft)

Es modular Es modular a partir de la versión 6

Utilizado en los grandes servidores raíz de Internet Utilizado en entornos corporativos

Ejecutado  desde  un  usuario  diferente  del  superusuario  root Ejecutado desde el propio usuario administrador del sistema


del sistema hasta la versión 6

La implantación de cada uno de ellos se puede ver en la figura del epígrafe Evolución.
Comprobar como el porcentaje de utilización de Apache es bastante superior al de IIS.

Evolución

La figura siguiente muestra la implantación de diferentes servidores web y su evolución en el tiempo.

Developer February 2011 Percent March 2011 Percent Change

Apache 171,195,554 60.10 179,720,332 60.31 0.21

7 de 31
Curso Mentor Apache

Microsoft 57,084,126 20.04 57,644,692 19.34 -0.70

Google 14,454,484 5.07 15,161,530 5.09 0.01

Lighttpd 1,953,966 0.69 1,796,471 0.60 -0.08

Esta   información   actualizada,   incluida   la   imagen,   se   puede   obtener   de http://news.netcraft.com/archives


/web_server_survey.html

8 de 31
Curso Mentor Apache

Introducción a Apache2
¿Qué es Apache?

El servidor HTTP Apache2 es un servidor web de software libre desarrollado por la Apache Software Foundation
(ASF). El producto obtenido de este proyecto es un servidor de código fuente completo, descargable y gratuito.
La página web del proyecto es www.apache.org.
Apache2 es robusto y con un ciclo de desarrollo muy rápido gracias a la gran cantidad de colaboradores voluntarios de
que dispone.
Es también un servidor estable, eficiente, extensible y multiplataforma.

Estable: es una consecuencia de su probada robustez que impide caídas o cambios en el servidor inesperados.
Flexible  y  eficiente: es capaz de  trabajar con  el estándar HTTP/1.1  (RFC2616) y con  la  mayor parte  de  las
extensiones web que existen en la actualidad, como son los módulos PHP, SSL, CGI, SSI, proxy,...
Extensible: dispone de gran cantidad de módulos que amplían su funcionalidad.
Multiplataforma ya que está disponible para diferentes plataformas como GNU/Linux, Windows, MacOS.

Desde el año 1996 es el servidor más utilizado en Internet y es el utilizado en los sistemas GNU/Linux. En concreto, a
fecha de Marzo de 2011 más del 60% de los sitios web de Internet utilizan Apache.

Busca el significado de los términos...

SSL (Secure Sockets Layer)


SSI (Server Side Includes)

9 de 31
Curso Mentor Apache

Un poco de historia
Origen de Apache

En   los   comienzos   de   Internet   hablar  de   'servicio   web'   se   limitaba   a   la   publicación   de   páginas   en   formato   HTML
utilizando el protocolo HTTP sobre redes TCTP/IP.
Al   poco   tiempo   de   la   aparición   de   la   Web   un   grupo   de   personas   del   Centro   Nacional   de   Actividades   de
Supercomputación (National Center for Supercomputing Activities, NCSA) de la Universidad de Illinois, creó un servidor
web (HTTPd NCSA) que fue el más utilizado hasta 1994. Su principal desarrollador, Rob McCool, abandonó el NCSA y
el proyecto.
Pero a partir de aquel momento varios webmasters comenzaron a desarrollar diferentes 'parches' para el código fuente
de este servidor 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  que  aparece  de  Apache  es la  0.6  en  Abril de  1995, que  tomó  como  punto  de  partida  la  versión
httpd 1.3 de NCSA.
El   proyecto   evolucionó   muy   rápidamente   y   en   él   también   colaboraron   desarrolladores   de   NCSA.   La   versión   1.0
apareció en diciembre de 1995. Y en un año pasó a ser el servidor web más utilizado en Internet a nivel mundial.
En   1998   se   llegó   a   un   acuerdo   con   IBM  que   permitió   que   Apache   funcionara   también   en   plataformas   Windows
convirtiéndose así en una alternativa al servidor IIS (Internet Information Server).
En  estos momentos se  está  trabajando con versiones 2.2.X, aunque  todavía  muchos servidores web  en producción
utilizan la última versión más extendida que es la 1.3.33. La última versión de Apache es la 2.2.17 (Abril 2011).
Se recomienda utilizar la versión 2.2 ya que incluye nuevas funcionalidades (http://httpd.apache.org/docs/2.2/es/).  La
página correspondiente a la documentación en castellano es la indicada.

Licencia de Apache

Respecto a la licencia de Apache 2 están disponibles sus términos en la URL http://httpd.apache.org/docs/2.2/en/license.html.
En resumen se puede decir que, la licencia:
Permite:

Descargar  y   usar  libremente  el  software  de  Apache2,   total  o  parcialmente,   de  forma  personal,   desde  la  empresa  con
objetivos internos o comerciales.
Utilizar el software de Apache2 en paquetes o distribuciones que cree el usuario.

Prohibe:

Redistribuir partes del software incluido en Apache2 sin el permiso adecuado.

Requiere:

Incluir una copia de la licencia en cualquier redistribución que el usuario pueda hacer que incluya el software de Apache2.
Decir claramente que Apache pertenece a la ASF (Apache Software Foundation) en cualquier distribución que incluya el
software de Apache.

No requiere:

Incluir  los   fuentes   del  software  de  Apache  propiamente,   o  de  cualquier  modificación  que  el  usuario  haga  sobre  el,   en
cualquier distribución en el que pueda ser incluido.

10 de 31
Curso Mentor Apache

Enviar los cambios que el usuario hace al software a la Apache Software Foundation.

11 de 31
Curso Mentor Apache

Características generales del servidor Apache2


Características

Incluimos  un  resumen  de  las  características  generales  del  servidor  Apache2.   Es  posible  que  de  muchas  de  ellas  ahora  no  se
entienda su significado, pero a lo largo del curso se irán 'descubriendo'.

1. Cumple el estándar HTTP/1.1

Nueva versión del protocolo HTTP que amplia su funcionalidad según se detalla en esta
unidad.

2. Configurable y extensible mediante módulos

Existe gran cantidad de módulos disponibles para Apache2 y permite la creación de
nuevos módulos por parte de usuarios programadores. En la Unidad 4 se habla
extensamente acerca de los módulos.

3. Proporciona el código fuente con licencia sin restricciones.

Es gratuito, pero ante todo es código fuente libre, lo cual permite saber en todo
momento qué estamos instalando.

4. Multiplataforma

Existen versiones tanto para Windows como para GNU/Linux. El curso contempla las
plataformas Windows 7 y GNU/Linux Ubuntu.

5. Continua actualización y desarrollo.

Un grupo de desarrolladores está continuamente revisando y corrigiendo todos los fallos
de seguridad y generales de la herramienta que van surgiendo entre versiones.

6. Bases de datos DBM para autenticación de usuarios.

Permiten la protección de documentos mediante contraseñas para una gran cantidad de
usuarios.

7. Permite crear páginas web protegidas

Mediante constraseñas con un número grande de usuarios autorizados, sin sobrecargar
el servidor.

8. Permite personalizar las respuestas a errores y problemas del servidor.
9. Múltiples directivas DirectoryIndex

Ejemplo:  DirectoryIndex index.html index.cgi


que  indica  al   servidor  que  debe  enviar  index.html   o  ejecutar  index.cgi   cuando  se
acceda a una URL que sea un directorio.

10. Sin límite fijo sobre el número de Alias y redirecciones

Pueden ser declaradas en los archivos de configuración.

11. Negociación de contenido

El  servidor  proporciona  a  los  clientes  web  de  diferentes  tipos  los  documentos  con  el
mejor nivel de calidad que estos clientes web pueden soportar.

12. Hosts virtuales también llamados servidores multi-alojados.

Esto   permite   al   servidor   distinguir   entre   peticiones   hechas   a   diferentes   direcciones


IP/:puerto   nombres   (mapeados   a   la   misma   máquina).   En   la   Unidad   5   se   habla
extensamente acerca de los hosts virtuales.

12 de 31
Curso Mentor Apache

13. Archivos logs configurables

Se puede configurar Apache2 para generar logs en el formato que se quiera.

13 de 31
Curso Mentor Apache

Actividades
Actividad 1.1

¿Que diferencia hay entre software libre y software gratuito?
Es importante diferenciar ambos términos.
Software  libre  (Free  Software)  es  un  software  que  se  publica  bajo  la  licencia  GPL  (General  Public  Licence)  y  debe  cumplir  los
siguientes requisitos:

Poder ejecutarlo con cualquier propósito.
Poder copiarlo y distribuirlo.
Poder modificarlo para que se adapte a tus necesidades o las de un tercero.
Poder mejorarlo y publicar las mejoras para ayudar a la comunidad.

Y todo esto siempre y cuando no se viole la licencia, que dice que se puede copiar, distribuir y modificar siempre que se respete la
autoría de la versión original de la obra.
Por el software libre sí se puede cobrar. Muchas empresas lo hacen, como Red-Hat, IBM, ... El témino Free hace referencia a esas
libertades que hemos mencionado no a su gratuidad.
Mas información en http://www.fsf.org/

Software  gratuito  (llamado  normalmente  Freeware)  puede  ser  distribuido  comercialmentey  puede  incluir  en  ocasiones  el  código
fuente.   Pero  este  tipo  de  software  no  es   libre  en  el  mismo  sentido  que  lo  es   el  software  libre  propiamente,   a  menos   que  se
garanticen todas las libertades.
Existen muchas modalidades de freeware. En http://www.desarrolloweb.com/articulos/2460.php hay una descripción de algunas de
ellas.
Para completar la actividad puedes buscar en la web definiciones para Software privativo, Open Source y Shareware.

14 de 31
Curso Mentor Apache

Apache: servidor web


Tipos de contenidos

Apache proporciona contenidos al cliente web o navegador como:

Páginas estáticas: es el modo más básico y antiguo, pero también es el uso más generalizado que se hace de un servidor
web. De esta forma se transfieren archivos HTML, imágenes, etc y no se requiere un servidor muy potente en lo que al
hardware se refiere.
Páginas dinámicas: la información que muestran las páginas que sirve Apache cambia continuamente ya que se obtiene a
partir de consultas a bases de datos u otras fuentes de datos. Son páginas con contenido dinámico, cambiante.

Apache facilita la generación de este tipo de contenidos ya que:

1. Dispone de soporte del protocolo HTTP/1.1 y además mantiene la compatibilidad con HTTP/1.0.
2. Permite  la  ejecución  de  scripts  CGI   (Common  Gateway  Interface)  que  son  programas  externos  que  se  llaman  desde  el
propio servidor cuando una página lo necesita.
3. El CGI recibe información desde el servidor y genera como salida una página web dinámica que se visualiza en el cliente
web.   Este  script   puede  escribirse  en  cualquier  lenguaje  de  programación  siempre  que  siga  las   reglas   del  interfaz   CGI.
Normalmente se utiliza Perl. Este tipo de mecanismo ya no se utiliza prácticamente y se desaconseja su uso ya que lanza
un proceso externo al servidor web por cada petición del cliente y se ralentiza. En su lugar se están utilizando los servlets.
4. Permite  la  creación  de  hosts  virtuales  y  de  esa  forma  atender  varios  sitios  web  en  distintos  dominios  desde  la  misma
máquina.
5. Permite restringir recursos a determinados usuarios o grupos distintos de los del sistema.
6. Permite la utilización de módulos, como PHP  y mod_perl, para sustituir la funcionalidad de los CGIs. Estos módulos al
estar incluidos en Apache no requieren la ejecución de un nuevo proceso por cada petición.
7. Con soporte para SSL (Secure Sockets Layer) que permite encriptación de datos y así asegura la privacidad y fiabilidad de
la comunicación web. Utiliza criptografía asimétrica y certificados digitales para intercambiar una clave de sesión simétrica.
8. Servlets   y   JSP   en   Java.   Esta   opción   se   utiliza   en   servidores   de   aplicaciones   como   Tomcat,   Jboss,   Oracle   IAS,
WebSphere de IBM o BEA WebLogic. Su ventaja es la escalabilidad y la portabilidad, ya que se puede desarrollar en Java y
luego se puede ejecutar en cualquier máquina virtual compatible.

Arquitectura en capas

Un modelo muy utilizado en la actualidad es el de la arquitectura en capas. Una arquitectura en tres capas utiliza una capa:

1. de presentación que será la interfaz gráfica con la que interactúa el usuario.
2. para el servidor de aplicaciones que indicará cómo se ejecutan los procesos (modelo).
3. para guardar los datos (servidor de bases de datos).

Este modelo en capas contrasta con el modelo clásico en el que sólo existe un servidor web y un cliente web o navegador.

15 de 31
Curso Mentor Apache

La figura anterior muestra el modelo de servidor web en tres capas. 
Mas información sobre la arquitectura en tres capas en www.mhproject.org.

¿Qué es un servlet?

Según la Wikipedia (http://es.wikipedia.org/wiki/Java_Servlet) los servlets son objetos que corren dentro del contexto
de un servidor web y extienden su funcionalidad. Por ejemplo, Tomcat sólo es un contenedor de servlets.
Los servlets se utilizan para manejar peticiones de cliente HTTP.
Por  ejemplo,   tener  un   servlet   procesando   datos  enviados  mediante   un   formulario   HTML   con   datos  relativos  a   una
compra electrónica. Este servlet formaría parte de un sistema de pagos on-line que accedería a una base de datos de
productos.
Un servlet es un programa que se ejecuta en un servidor web y no tiene interfaz gráfico.
El uso más común de los servlets es generar páginas web de forma dinámica a partir de los parámetros de la petición
que envíe el navegador web.
Otro uso de los servlets es reenviar peticiones a otros servidores y servlets.
Es importante conocer la diferencia entre servlet y portlet.

16 de 31
Curso Mentor Apache

Actividades
Actividad 1.2

Diferencia entre servlet y portlet
Un servlet es un programa que se ejecuta en un servidor web.  El uso más común de los servlets es generar páginas web de forma
dinámica a partir de los parámetros de la petición que envíe el navegador web.
Los servlets se pueden considerar que son herederos de los antiguos CGIs. Atienden peticiones de un cliente. Por ejemplo, un
servlet puede ser el responsable de tomar los datos de un formulario HTML y enviarlos a una base de datos para su actualización.
Los portlets son componentes web basados en Java que procesan peticiones y generan contenido dinámico. Los portales usan
portlets como componentes de interfaz de usuario que proveen de una capa de presentación a los sistemas de información.
Las similitudes entre los portlets y los servlets son:

Los portlets y servlets son componentes web de J2EE.
Ambos son manejados por contenedores, que controlan su ciclo de vida y interacción.
Cada uno genera contenido dinámico siguiendo la estructura petición/respuesta.

Las diferencias entre ellos son las siguientes:

Los portlets generan fragmentos de código mientras que los servlets generan documentos completos.
A diferencia de los servlets, los portlets no vinculan directamente al URL.
Los portlets tienen un esquema de petición mas complejo, con dos tipos de petición: Action y Render.
Los portlets se adhieren a la estandarización de un conjunto de estados y modos que definen su contexto de funcionamiento
y las reglas de renderización.

Además los portlets pueden hacer otras cosas que no lo pueden hacer los servlets, como:

Los portlets tiene un mecanismo mucho más sofisticado para acceder y guardar la información de la configuración.
Los portlets tienen acceso a la información de los perfiles de los usuarios más allá de la información básica y el rol
proporcionado en la especificación del servlet.
Los portlets tienen dos formas diferentes para guardar objetos dentro de la sesión.

Algunas características que no tiene los portlets son:

Los portlets no pueden alterar el encabezado http o fijar la codificación de la respuesta.
No pueden acceder a la URL que el cliente utilizó para iniciar la petición en el portal.

Mas información en:

http://150.185.75.30/atiwiki/index.php/PORTLETS
http://es.wikipedia.org/wiki/Java_Servlet

17 de 31
Curso Mentor Apache

El protocolo HTTP
¿Qué es el protocolo HTTP?

18 de 31
Curso Mentor Apache

Las siglas HTTP significan Hyper Text Transfer Protocol, Protocolo de Transferencia de HiperTexto.
HTTP es el protocolo usado en las  transacciones de la web (www).
El hipertexto es el contenido de las páginas web, y el protocolo de transferencia es el conjunto de normas mediante
las que se envían las peticiones de acceso a una web y la respuesta de esa web.
HTTP se define como un conjunto de normas que permiten la comunicación entre el servidor y los clientes y la
transferencia de información (archivos de texto, imágenes, archivos de música, ...) entre ambos.
HTTP es un protocolo cliente/servidor cuyo funcionamiento está basado en el envío de mensajes y consiste en que:

El  usuario   especifica   en   el  cliente   web   (navegador)  la   dirección   de   la   página   que   quiere   consultar  según  un
formato http://dirección[:puerto][path].
El cliente web decodifica la información de la URL diferenciando el protocolo de acceso, IP o nombre de dominio
del servidor, puerto,...
El cliente web establece una conexión (socket) con el servidor web y solicita la página (mensaje request).
El servidor envía dicha página (si no existe envía un código de error) y el cliente web interpreta el código HTML
recibido. Mensaje response del servidor.
Se cierra la conexión.

El protocolo HTTP es un protocolo sin estado, es decir, no recuerda nada relativo a conexiones anteriores a la actual.
Entonces:

Si el servidor encuentra el documento HTML solicitado por el cliente web, lo envía.
Si no existe se envía un código de error.

En ambos casos, y por ser un protocolo sin estado, al final se libera la conexión.
Por lo tanto, la conexión sólo tiene la duración correspondiente a la transmisión de la página solicitada.
Para cada objeto que se transfiere por la red se realiza una conexión independiente.
Ejemplo: si el cliente web solicita una página que incorpora varias imágenes se realizan las siguientes conexiones: una
para el documento HTML y una por cada una de las imágenes.

19 de 31
Curso Mentor Apache

¿Qué son las cookies?

Para  resolver estas situaciones de  “falta  de  memoria” del protocolo, además de  recordar la  información  de  la  sesión
actual (cuya información se pierde, por ejemplo, al cerrar el navegador), se utilizan las cookies.
Las cookies son archivos de texto que se intercambian entre el cliente web y el servidor.
Cuando   se   solicite   de   nuevo   un   intercambio   de   información   entre   estos   mismos   puntos   se   tendrá   en   cuenta   la
información almacenada en esos archivos.
Por  ejemplo,   un   usuario   navega   por  la   web   y  va   visitando   páginas,   validandose   en   unas,   cambiando   el  idioma   en
otras,   haciendo   búsquedas  o    simplemente   guardando   información   de   otras.   Todas  estas  visitas  dejan   'migas'  que
identifican nuestro deambular por la web y definen nuestras preferencias y son guardadas en estos archivos de texto
llamadas cookies.

Métodos del protocolo HTTP

Como ejemplo de métodos disponibles en HTTP recordamos que en la versión 1.0 el cliente web podía solicitar del servidor sólo
tres operaciones:

Métodos Descripción

GET obtener información del servidor, como puede ser pedir una página al hacer un clic sobre un
enlace. Es la operación que se ejecuta cada vez que se pulsa sobre un enlace y se accede a una
página web.

POST enviar información desde el cliente web al servidor, como, por ejemplo los datos introducidos
en un formulario web.

HEAD similar a GET pero sólo se pide la cabecera de la página con información como el tamaño,
tipo, fecha de modificación, etc.

Por ejemplo, para un mensaje de petición al servidor la primera línea tiene la estructura:

GET /index.html HTTP/1.0

que debe interpretarse como una petición (GET) del archivo index.html que está en el directorio raíz compatible con la versión 1.0
del protocolo HTTP.
Por ejemplo, para un mensaje de respuesta del servidor la primera línea tiene la estructura:

HTTP/1.0 200 OK

que debe interpretarse como la respuesta de petición servida (código 200) con éxito e indica la versión de HTTP utilizada (1.0). El
texto OK está relacionado con el código de error correspondiente. La lista de códigos está disponible en la Unidad 2.
El protocolo HTTP v. 1.1 es más potente y dispone de trece métodos diferentes.
Según  sus   creadores   el  protocolo  HTTP/1.1  se  puede  describir  como:   "un   protocolo   de  nivel   de  aplicación   orientado   a
sistemas distribuidos, para la colaboración e hypermedia. Un protocolo genérico, sin estado, orientado a objetos y que
puede   ser   utilizado   para   muchas   aplicaciones,   como   servidores   de   nombres   y   sistemas   de   gestión   de   objetos
distribuidos,   a  través  de  las  extensiones  de  los  métodos  de  petición.   Una  característica  de  este  protocolo   es  la
negociación de los tipos y representación de los datos, permitiendo que los sistemas no dependan del tipo de datos
que se utilicen".
La  nueva  versión  de  HTTP/1.1  está  detallada  en  el  RFC  2068  (http://www.faqs.org/rfcs/rfc2068.html)  de  Enero  de  1997.   Las
principales características de esta nueva versión son:

20 de 31
Curso Mentor Apache

Conexiones persistentes: aunque un documento conste de varias partes no se abre y cierra la conexión para el envío de
cada una de ellas. De esta forma se evita una sobrecarga por conexiones TCP.
Varias peticiones simultáneas: el cliente web puede hacer varias peticiones a través de una única conexión, sin tener que
esperar a que el servidor responda a cada una de ellas.
Negociación  del   contenido:   consiste  en  seleccionar  la  representación  HTTP   adecuada  cuando  se  da  respuesta  a  una
petición, como por ejemplo, adaptarse a las preferencias del navegador utilizado.
Nuevos métodos: junto a GET, POST y HEAD aparecen los métodos
TRACE  ver lo que está recibiendo el servidor

DELETE  borrar un recurso del servidor

PUT  almacenar recursos en el servidor

PATCH  aplicar correcciones en un recurso asociado a una URL

COPY  copiar recursos identificados por una URL en otro lugar

MOVE  mover el recurso identificado por la URL a otro lugar

LINK  establecer enlaces entre diferentes recursos

UNLINK  quitar enlaces establecidos previamente por LINK

OPTIONS  el cliente puede obtener las características del servidor

WRAPPED  puede unir varias peticiones y puede protegerlas con un filtrado como pueda ser la encriptación.

Nuevo método de autenticación: en el que las claves de acceso van encriptadas por la red, al contrario de lo que ocurre
en HTTP 1.0. Todavía pendiente.

A pesar de todas estas mejoras introducidas por la versión 1.1 de HTTP  el futuro de este protocolo se llama HTTP-NG (HTTP
Next   Generation)   que   incluye   más   funcionalidades,   es   mas   sencillo,   tiene   un   mejor   rendimiento,   mejor   nivel   de   seguridad
(encriptación), autenticación en ambos extremos de la conexión, pagos en línea (comercio electrónico), visualización obligatoria de
información sobre el objeto que se transmite (autor, copyright, licencia,...), información de registro, etc.
Se espera que la nueva versión 3 de Apache ya implemente este protocolo HTTP-NG.

Saber mas ... sobre el protocolo HTTP

Puedes visitar los enlaces:

1. Lista de códigos de estado HTTP


2. Definición de campos de cabecera HTTP

21 de 31
Curso Mentor Apache

Actividades
Actividad 1.3

22 de 31
Curso Mentor Apache

Funcionamiento de GET
El funcionamiento del protocolo HTTP con la operación GET es el siguiente:

1. El cliente web envía una petición al servidor. Por ejemplo, intentamos conectarnos mediante telnet a la página de Google a
través   del  puerto  80.   Desde  una  terminal  ejecutar  como  root   el  siguiente  ejemplo  de  petición  y   añadimos   una  posible
respuesta en el caso de que la orden no estuviera desactivada:

# telnet www.google.es 80
Trying 66.249.93.104...
Connected to www.google.es.
Escape character is '^]'.
GET /index.html HTTP/1.0 #Petición mediante GET

2. El servidor responde con una línea de estado, incluyendo la versión del protocolo del mensaje y si la petición tuvo éxito o
fracaso, con un código de resultado, seguido de una serie de informaciones del servidor y del elemento solicitado. Al final el
servidor rompe la conexión.
Siguiendo el ejemplo:

HTTP/1.0 302 Found
Location: http://www.google.es/index.html
Cache-Control: private
Content-Type: text/html
Server: GWS/2.1
Content-Length: 228
Date: Fri, 21 Apr 2006 15:09:01 GMT
Connection: Keep-Alive
............................. aquí vendría el código de index.html

Se puede estudiar la petición al servidor también utilizando la orden wget de la forma:

#  wget www.terra.es
--2011-04-05 16:39:46--  http://www.terra.es/
Resolviendo www.terra.es... 213.4.130.210
Conectando a www.terra.es|213.4.130.210|:80... conectado.
Petición HTTP enviada, esperando respuesta... 302 Found
Ubicación: http://mov.terra.es [siguiente]
--2011-04-05 16:39:46--  http://mov.terra.es/
Resolviendo mov.terra.es... 213.4.130.231
Conectando a mov.terra.es|213.4.130.231|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 29838 (29K) [application/xhtml+xml]
Guardando en: «index.html»

100%[======================================>] 29.838      --.-K/s   en 0,05s  

2011-04-05 16:39:46 (593 KB/s) - «index.html» guardado [29838/29838]

Se trata de una petición HTTP que como respuesta devuelve el OK (200) y a su vez descarga la página de inicio (index.html) de la
web indicada.

23 de 31
Curso Mentor Apache

Tipos MIME
¿Qué son los tipos MIME?

Las siglas MIME significan Multiporpose Internet Mail Extension.
Los  tipos  MIME   son   un   estándar   que  especifican   cómo   debe  un   programa  (inicialmente  un  programa  de  correo  o  un
navegador web) transferir los archivos multimedia (vídeo, sonido, o cualquier archivo que no esté codificado en ASCII).

Antes de la utilización de los tipos MIME cualquier archivo que no fuese texto ASCII debía codificarse a estos caracteres haciendo
uso de las herramientas Uuencode y Uudecode.
MIME adjunta un archivo de cabecera a los archivos, indicando el tipo de contenido del archivo y esto permite al servidor web y al
navegador manejar y mostrar correctamente los datos.
Por lo tanto, se puede decir que el tipo MIME indica el tipo de archivo que se está transfiriendo del servidor al cliente o navegador
web.
Los tipos MIME definen tipos (indicado antes del carácter '/') y subtipos (indicado después del carácter '/'). Por ejemplo:

el tipo MIME "text/html" define todos los archivos de texto que contienen código HTML.
el tipo "video/mpeg" define todos los archivos de vídeo almacenados en formato mpeg.
el tipo MIME "image/*" define todos los archivos de imagen almacenadas en cualquier formato: gif, jpeg, bmp, etc.

El protocolo HTTP usa tipos MIME en las cabeceras, por ejemplo para las siguientes funciones:

1. Informar   al   navegador   el   tipo   de   datos   que   está   recibiendo   del   servidor.   Esto   se   hace   con   el   encabezado
Content-Type. El navegador manejará los datos de tres formas diferentes según el tipo MIME indicado en Content-Type :

Visualizar el documento, por ejemplo con tipos “text/html”.
Llamar a una aplicación externa, por ejemplo con tipos “application/pdf”.
O preguntarle al usuario qué hacer con un tipo que no se entiende, por ejemplo “image/x-fwf”.

Ejemplo: desde el navegador Mozilla Firefox abrimos Google y buscamos ITE. En el menú del navegador ir a Ver > Código fuente de la página y aparece 

<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>CNICE -

Buscar con Google</title><style><!--

2. Permitir la negociación de contenido. El navegador en su petición incluye los tipos MIME que acepta. Por ejemplo, si el
navegador   soporta   archivos   comprimidos   del   tipo   “application/zip”,   lo   indica   en   la   cabecera   HTTP   poniendo   Allow:
application/zip.
3. Encapsular uno o más objetos dentro del cuerpo de mensaje, mediante el tipo MIME  multipart. Quizás el ejemplo
más   conocido  sea  el  tipo  “multipart/form-data”  que  sirve  para  enviar  los   datos   de  un  formulario  (mediante  el  método
POST).

En la edición web la referencia a los tipos MIME se puede hacer desde tres lugares diferentes:

1. Desde el servidor: que indica al navegador el tipo de datos que envía. Por ejemplo, en el servidor Apache se puede indicar
con la directiva DefaultType el tipo MIME por defecto que el servidor utilizará en los archivos que no pueda identificar su
tipo automáticamente.

DefaultType text/plain

2. Desde la página web: en ella se hace referencia a los tipos MIME a través de un enlace a un archivo externo como una hoja
de estilo:

<link rel=”Stylesheet” href=”hoja_estilo.css” type=”text/css”>

También puede especificarse como atributo en otras etiquetas HTML, como object o form (atributo enctype).
Y también con las etiquetas <meta HTTP-EQUIV: ....> podemos hacer que la página participe en el diálogo cliente-servidor

24 de 31
Curso Mentor Apache

especificando tipos MIME. 
3. Desde el navegador web: que debe poder interpretar el tipo MIME  recibido desde el servidor y también puede indicar qué
tipos MIME acepta (cabecera http-accept). Si aparece */* significa que acepta cualquier tipo MIME.

text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;
q=0.8,image/png,*/*;q=0.5

Este  es  el  contenido  de  la  variable  predefinida  HTTP_ACCEPT  de  PHP   que  está  disponible  mediante  la  llamada  a  la  función
phpinfo().

Saber más... sobre los tipos MIME

Tienes mas información sobre los tipos MIME en:

http://es.wikipedia.org
http://technet.microsoft.com
http://www.iana.org

25 de 31
Curso Mentor Apache

Glosario
Glosario Unidad 1

Concepto Definición

Applet Programa en lenguaje Java que puede integrarse en páginas HTML y se ejecuta en el navegador, aunque
no  puede  acceder  a  los  recursos  locales,   como  archivos,   periféricos,....   Es  independiente  del  sistema
operativo.

ASF Apache   Software   Foundation.   Comunidad   de   desarrolladores   que   trabajan   en   proyectos   de


código libre sobre Apache basados en el consenso y la colaboración.

Certificado digital Consta de una clave pública y un identificador que han sido firmados digitalmente por una Autoridad de
Certificación (CA). Sirve para demostrar que una clave pública pertenece a un usuario concreto.

CGI Common  Gateway  Interface  (en  inglés  'Pasarela  de  Interfaz  Común').   Los  scripts  CGI   son  pequeños
programas   alojados   en  el   servidor   web  y   que  pueden  ser   utilizados   desde  las   páginas   web  que  se
hospeden en dicho servidor.

Criptografía asimétrica Técnica basada en el uso de dos claves, una pública y otra privada. La clave pública cifra y la
privada descifra. Cada usuario tiene dos claves. La clave privada solo la conoce el dueño de la
clave, es decir, no se envía por la red. La clave pública es conocida por otros usuarios en otras
máquinas, es decir, se publica. Estas claves se generan al mismo tiempo dando lugar a pares
biunívocos, de tal forma que la combinación pública-privada es única.

Enctype Establece el tipo MIME y el código de caracteres empleado para la transferencia de información
entre un cliente y un servidor.

FQDN Nombre de dominio totalmente cualificado.

HTTP Protocolo para transferir archivos o documentos hipertexto a través de la red. Basado en la arquitectura
cliente/servidor.

Método GET Forma de paso de parámetros mediante URL.

Método POST Forma de paso de parámetros mediante formulario (normalmente).

Navegador web Cliente  que  permite  consultar  a  Servidores   web  y   presentar  la  información  HTML.   Ejemplos:   Firefox,
Konqueror, Opera, Internet Explorer, etc.

Portlet Componentes modulares de  interfaz de  usuario  gestionados y visualizados en  un  portal web


(interfaz de usuario).

Protocolo   de Es el sistema mediante el cual se envían las peticiones de acceso a una web y la respuesta de
transferencia esa web.

Sitio web Conjunto de reglas del servidor web y las páginas web que lo componen.

Software libre Software que puede ser usado, copiado, estudiado, modificado y redistribuido libremente.

URI - URL Términos equivalentes que  identifican  o  localizan  un  recurso  universal en  la  web, ya  sea  una
imagen, un sonido, un vídeo o la página web que integra todos estos contenidos.

26 de 31
Curso Mentor Apache

Concepto Definición

Webmaster Persona responsable o administrador de un sitio web concreto.

World Wide Web Es   una   agrupación   de   miles   de   páginas   electrónicas   basadas   en   textos   y   en   todo   tipo   de
información   multimedia,   conectadas   entre   sí,   a   través   de   hiperenlaces,   con   la   finalidad   de
recuperar   información   de   forma   sencilla,   sin   que   sea   necesario   conocer   previamente   su
ubicación exacta.

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

27 de 31
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Introducción a los servidores web: http://www.cibernetia.com/
3. Conceptos sobre servidores web: http://trevinca.ei.uvigo.es/

28 de 31
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 1 'Introducción'

Los puntos a destacar de esta unidad son los siguientes:

1. Un  servidor  web  es   un  programa  que  implementa  el  protocolo  HTTP   (hypertext   transfer  protocol).   Este  protocolo  está
diseñado para transferir lo que llamamos hipertextos, páginas web o páginas HTML.
2. El objetivo de un servidor web es servir o suministrar páginas web a los clientes web o navegadores que las solicitan.
3. Para que el navegador pueda llegar al servidor web (ya sea en una red local o en Internet) el servidor debe tener asignada
una dirección IP (Internet Protocol) única que identifica el equipo en la red.
4. La información que el usuario proporciona al navegador para conectar con un servidor web se llama URL (Uniform Resource
Locators).
5. Apache es un servidor web con un porcentaje de utilización bastante superior al de IIS.
6. El servidor HTTP Apache2 es un servidor web de software libre desarrollado por la Apache Software Foundation (ASF). El
producto obtenido de este proyecto es un servidor de código fuente completo, descargable y gratuito.
7. HTTP se define como un conjunto de normas que permiten la comunicación entre el servidor y los clientes y la transferencia
de información (archivos de texto, imágenes, archivos de música, ...) entre ambos.
8. Los   tipos   MIME   son  un  estándar  que  especifican  cómo  debe  un  programa  (inicialmente  un  programa  de  correo  o  un
navegador web) transferir los archivos multimedia (vídeo, sonido, o cualquier archivo que no esté codificado en ASCII).

29 de 31
Curso Mentor Apache

Autoevaluación Unidad 1
Autoevaluación

El cuestionario de autoevaluación de la Unidad 1 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es).

30 de 31
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License

31 de 31
Curso Mentor Apache

Apache
Unidad 2: Instalación de Apache

 
En este capítulo aprenderás a:
realizar  la   instalación   del  servidor  web   Apache2   (versión   2.2)  en   Ubuntu   tanto   desde   la   línea   de   orden
(terminal) como desde el entorno gráfico.
identificar los procesos que se lanzan en el sistema al ejecutarse, así como los puertos en los que Apache2
está escuchando peticiones de los clientes.
las opciones de arranque y parada del servicio Apache2.
identificar los directorios y archivos que contienen la configuración del servicio.
realizar  la   instalación   del  servidor  web   Apache2   (versión   2.2)  en   Windows   teniendo   en   cuenta   algunas
consideraciones.
identificar la herramienta gráfica de gestión del servidor Apache2.
identificar los directorios y archivos que contienen la configuración del servicio.

Material complementario:
1. Archivo con las actividades referidas a lo largo de la unidad. Archivo U2_Actividades.pdf

2. Mapa conceptual de la unidad. Archivo U2_mapaconceptual.png

3. Glosario completo del curso. Archivo glosario.pdf

1 de 30
Curso Mentor Apache

Introducción
Objetivos

Conocer los requerimientos del sistema para la instalación de Apache2.

Realizar la instalación de Apache en ambos sistemas operativos.

Realizar la desinstalación de Apache en ambos sistemas.

Identificar las diferentes herramientas y archivos de configuración generados en el proceso de instalación.

Estalecer el nombre de dominio del servidor web Apache2 que se va a utilizar a lo largo del curso.

Conocimientos previos

En  esta  unidad  abordamos   la  instalación  de  Apache2  desde  cero.   El   único  requerimiento  es   tener  claros   los   conceptos   sobre
servidores web, el protocolo HTTP y los tipos MIME vistos en la Unidad 1.

Contenidos

Unidad 2: Instalación de Apache
A. Ubuntu

1. Instalación y desinstalación de Apache2


2. Aranque y parada de Apache2
3. Archivos y herramientas instaladas por Apache2
4. Nombre de dominio del servidor web Apache2

B. Windows

1. Instalación y desinstalación de Apache2


2. Aranque y parada de Apache2
3. Archivos y herramientas instaladas por Apache2
4. Nombre de dominio del servidor web Apache2

C. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 30
Curso Mentor Apache

Ubuntu: Instalación de Apache2


Preparativos para Ubuntu

Vamos a trabajar con una versión de Ubuntu como estación independiente (standalone).
La instalación de Apache2 la haremos desde el paquete Debian GNU/Linux. Conviene asegurarse que no existe previamente en el
sistema ningún paquete de Apache2 procedente de anteriores instalaciones.
El usuario que ejecuta todo el proceso es root (#) pero podría hacerlo también un usuario 'sudo', es decir con privilegios. La instalación
de Ubuntu no proporciona contraseña para root pero un usuario 'sudo' podría pasar a ser root ejecutando en una terminal la orden
sudo su.

Actividad 2.1

Enunciado: ¿Cómo comprobarías si existe una instalación de Apache2 previa en el sistema?
Solución:
Utilizando la orden dpkg de la forma siguiente:

# dpkg -s apache2

3 de 30
Curso Mentor Apache

Instalación
Instalación desde la línea de orden

Para instalar simplemente hay que ejecutar como root (o utilizando la orden sudo desde un usuario con privilegios de administración) la
orden siguiente. Es importante fijarse en la salida de la orden ya que nos proporciona mucha información acerca de las necesidades y
la configuración del servicio.

$ sudo su
# apt-get install apache2 o # aptitude install apache2
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapr1
libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
Paquetes sugeridos:
apache2-doc apache2-suexec apache2-suexec-custom
Se instalarán los siguientes paquetes NUEVOS:
apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common
libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
0 actualizados, 9 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 3330kB de archivos.
Se utilizarán 10,1MB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? s
Des:1 http://lliurex.net/leia/ llx1009/main libapr1 1.3.8-1build1 [116kB]
Des:2 http://lliurex.net/leia/ llx1009/main libaprutil1 1.3.9+dfsg-3ubuntu0.10.04.1
[85,6kB]
Des:3 http://lliurex.net/leia/ llx1009/main libaprutil1-dbd-sqlite3 1.3.9+dfsg-
3ubuntu0.10.04.1 [27,3kB]
Des:4 http://lliurex.net/leia/ llx1009/main libaprutil1-ldap 1.3.9+dfsg-3ubuntu0.10.04.1
[25,3kB]
Des:5 http://lliurex.net/leia/ llx1009/main apache2.2-bin 2.2.14-5ubuntu8.4 [2622kB]
Des:6 http://lliurex.net/leia/ llx1009/main apache2-utils 2.2.14-5ubuntu8.4 [160kB]
Des:7 http://lliurex.net/leia/ llx1009/main apache2.2-common 2.2.14-5ubuntu8.4 [290kB]
Des:8 http://lliurex.net/leia/ llx1009/main apache2-mpm-prefork 2.2.14-5ubuntu8.4 [2426B]
Des:9 http://lliurex.net/leia/ llx1009/main apache2 2.2.14-5ubuntu8.4 [1484B]
Descargados 3330kB en 3s (923kB/s)
Seleccionando el paquete libapr1 previamente no seleccionado.
(Leyendo la base de datos ... 00%
269497 ficheros y directorios instalados actualmente.)
Desempaquetando libapr1 (de .../libapr1_1.3.8-1build1_i386.deb) ...
......................................................
Seleccionando el paquete apache2.2-common previamente no seleccionado.
Desempaquetando apache2.2-common (de .../apache2.2-common_2.2.14-5ubuntu8.4_i386.deb) ...
Seleccionando el paquete apache2-mpm-prefork previamente no seleccionado.
Desempaquetando apache2-mpm-prefork (de .../apache2-
mpm-prefork_2.2.14-5ubuntu8.4_i386.deb) ...
Seleccionando el paquete apache2 previamente no seleccionado.
Desempaquetando apache2 (de .../apache2_2.2.14-5ubuntu8.4_i386.deb) ...
Procesando disparadores para man-db ...
Procesando disparadores para ufw ...
Procesando disparadores para ureadahead ...
ureadahead will be reprofiled on next reboot
Configurando libapr1 (1.3.8-1build1) ...

4 de 30
Curso Mentor Apache

Configurando libaprutil1 (1.3.9+dfsg-3ubuntu0.10.04.1) ...


Configurando libaprutil1-dbd-sqlite3 (1.3.9+dfsg-3ubuntu0.10.04.1) ...
Configurando libaprutil1-ldap (1.3.9+dfsg-3ubuntu0.10.04.1) ...
Configurando apache2.2-bin (2.2.14-5ubuntu8.4) ...
Configurando apache2-utils (2.2.14-5ubuntu8.4) ...
Configurando apache2.2-common (2.2.14-5ubuntu8.4) ...
Enabling site default.
Enabling module alias.
Enabling module autoindex.
Enabling module dir.
........................
Enabling module env.
Enabling module authz_host.
Enabling module reqtimeout.
Configurando apache2-mpm-prefork (2.2.14-5ubuntu8.4) ...
* Starting web server apache2 [ OK ]
Configurando apache2 (2.2.14-5ubuntu8.4) ...
.......................

Instalación desde Synaptic

La instalación también se puede hacer desde el entorno gráfico utilizando la herramienta Synaptic (Sistema >  Administración >
Gestor de paquetes Synaptic).

¿Apache2 en ejecución?

Si todo ha ido bien al abrir el navegador web Firefox e ir a http://localhost (donde localhost es un alias de la IP 127.0.0.1, identificada
como la interfaz de loopback) deberá aparecer una página indicando que el servidor Apache2 está instalado y ejecutándose. También
puede indicarse un nombre de dominio si se dispone de él.
Por lo tanto, al instalar Apache2 ya entra en ejecución y lanza varios procesos para atender peticiones http. Para comprobarlo ejecutar
la orden:

#ps ax | grep apache2


1240 ? Ss 0:00 /usr/sbin/apache2 -k start
1241 ? S 0:00 /usr/sbin/apache2 -k start
1242 ? S 0:00 /usr/sbin/apache2 -k start
1244 ? S 0:00 /usr/sbin/apache2 -k start
1245 ? S 0:00 /usr/sbin/apache2 -k start
1246 ? S 0:00 /usr/sbin/apache2 -k start
Es conveniente también instalar el paquete con la documentación de Apache2. Para ello ejecutar:

#apt-get install apache2-doc

Saber más ... sobre tus conocimientos de Apache2

5 de 30
Curso Mentor Apache

Conoce cuál es tu nivel de conocimientos sobre el servidos web Apache.

6 de 30
Curso Mentor Apache

Desinstalación de Apache2
Desinstalar en Ubuntu

La desinstalación de Apache2 se puede realizar desde Synaptic seleccionando el paquete apache2 y con el botón derecho pulsar en
desinstalación completa.
Desde la línea de orden se puede utilizar la orden dpkg.
En  cualquiera  de  los  casos  es  importante  saber  que,   mientras  exista  un  archivo  de  configuración  /etc/apache2/apache2.conf,   se
puede lanzar el proceso aunque el paquete no exista. Por lo tanto, si se quiere limpiar completamente, habrá que eliminar el resto de
paquetes que arrastra la instalación de Apache2. En concreto, el responsable de la creación del directorio /etc/apache2/ es el paquete
apache2.2-common. Hay que tener en cuenta que si los subdirectorios de este directorio no están vacíos éstos no se eliminan.
Por tanto para eliminar completamente Apache2 habrá que limpiar los directorios mods-available, mods-enabled, sites-available y
eliminar también los paquetes apache2.2-common y apache2-mpm-worker.
Si se quiere conocer, en un momento determinado, cuál es la versión de Apache2 instalada, ejecutar la orden:

#apache2 -v
Server version: Apache/2.2.16 (Ubuntu)
Server built: Nov 18 2010 21:17:29

Actividad 2.2

Averiguar qué línea de orden utilizarías para eliminar completamente el paquete correspondiente a Apache2.

Saber más ... sobre algunas órdenes Ubuntu

La orden dpkg se utiliza para instalar, desinstalar y proporcionar información sobre paquetes .deb. Hay que tener en cuenta que NO
resuelve las dependencias.

7 de 30
Curso Mentor Apache

Arranque y parada de Apache2 en Ubuntu


Servicios en Ubuntu

Los servicios en Ubuntu se pueden ejecutar de tres formas dependiendo del tipo de servicio:

1. Como procesos independientes hijos del proceso init.
2. Como procesos hijos del demonio inetd (o xinetd).
3. Como procesos hijos de portmap

Por  defecto  la  instalación  de  Apache2  lo  hace  como  procesos  independientes  hijos  de  init.   Es  el  método  más  seguro  ya  que  no
requiere la ejecución permanente de otro proceso (inetd) que esté escuchando posibles peticiones http.

Actividad 2.3

Enunciado: Comprobar que el proceso generado por la ejecución del servidor Apache2, es un proceso hijo del demonio del sistema
init.
Para ello ejecutamos la orden siguiente:

# ps axl | grep apache2


5 0 1240 1 20 0 5448 2828 poll_s Ss ? 0:00 /usr/sbin
/apache2 -k start
5 33 2256 1240 20 0 5448 1700 inet_c S ? 0:00 /usr/sbin
/apache2 -k start
5 33 2257 1240 20 0 5448 1700 inet_c S ? 0:00 /usr/sbin
/apache2 -k start
5 33 2258 1240 20 0 5448 1700 inet_c S ? 0:00 /usr/sbin
/apache2 -k start
5 33 2259 1240 20 0 5448 1700 inet_c S ? 0:00 /usr/sbin
/apache2 -k start
5 33 2260 1240 20 0 5448 1700 inet_c S ? 0:00 /usr/sbin
/apache2 -k start

Comprobamos que en la primera línea se lanza el proceso /usr/sbin/apache2 con un PID = 1240 y un PPID = 1 que es el PID del init.
Todos los demás procesos lanzados son hilos de ejecución hijos del proceso inicial de Apache2.

Acciones sobre el servidor Apache2

Las acciones que se pueden realizar sobre el servidor web Apache2 son las siguientes:

1. Arrancar Apache: ejecutar como root la orden

#/etc/init.d/apache2 start
* Starting web server apache2  

y que da lugar a la ejecución del binario siguiente con las opciones por defecto:

/usr/sbin/apache2 -k start

donde:
-k indica el modo de ejecución de Apache2: arranque, parada, etc.

8 de 30
Curso Mentor Apache

Si no arranca de forma automática, para añadir las entradas adecuadas para que el servidor web se inicie en los niveles de ejecución
estándar de Debian ejecutar:

#update-rc.d apache2 defaults

2. Detener Apache: ejecutar como root la orden:

#/etc/init.d/apache2 stop
*   Stopping   web   server
apache2                                                   ... ...waiting   

que mata todos los procesos lanzados relativos a Apache.
3. Reiniciar el servidor: cierra las conexiones activas

#/etc/init.d/apache2 restart

4. Forzar a que Apache vuelva a leer su archivo de configuración:

# /etc/init.d/apache2 reload / force-reload
Otras opciones disponibles desde Apache2 son:

Opción Descripción

-l lista los módulos compilados

-L muestra las directivas de compilación

-t realiza un chequeo del archivo de configuración (sintaxis)

9 de 30
Curso Mentor Apache

Herramientas instaladas por Apache2


Archivos y directorios

Por defecto la instalación de Apache2 intenta añadir y eliminar módulos, hosts virtuales y directivas de configuración extras de forma
tan flexible como sea posible, con el objetivo de automatizar los cambios y facilitar la administración del servidor.
Los archivos y directorios creados en /etc/apache2/ en el proceso de instalación son los siguientes:

apache2.conf  es el archivo de configuración principal

conf.d/  contiene archivos de configuración asociados a módulos específicos. Los archivos de este directorio son incluidos
mediante la línea siguiente en /etc/apache2/apache2.conf:

Include /etc/apache2/conf.d

httpd.conf  archivo vacío. No se usa desde Ubuntu.

mods-available/  este directorio contiene una serie de archivos .load y .conf.

Los archivos .load contienen directivas de configuración de Apache necesarias para la carga del módulo en cuestión.
El   correspondiente  archivo  .conf  contiene  directivas   de  configuración  necesarias   para  la  utilización  del   módulo  en
cuestión.
mods-enabled/      para  activar  un  módulo  para  Apache2  es   necesario  crear  un  enlace  simbólico  en  este  directorio  a  los
archivos  .load  asociados  con  el  módulo  en  mods-available/.   También  para  .conf  si  existe.   Por  defecto  la  instalación  de
Apache2 deja 'activados' un grupo de módulos.
ports.conf  directivas de configuración que indican puertos y direcciones IP donde Apache2 escucha peticiones.

sites-available/  similar a mods-available/ excepto que contiene archivos de configuración para diversos hosts virtuales que
podrían  ser  utilizados  en  Apache2.   Observar  que  el  'hostname'  no  tiene  que  corresponder  exactamente  con  el  nombre  del
archivo. 'default' es el host por defecto.
sites-enabled/      funcionalidad  similar  a  mods-enabled/   y  contiene  enlaces  simbólicos  a  sitios  de  sites-available/   que  el
administrador ha activado.

Herramientas disponibles:

Nombre Descripción

a2enmod activa módulos utilizando el anterior sistema de configuración

a2dismod desactiva módulos utilizando el anterior sistema de configuración

a2ensite activa sitios

a2dissite desactiva sitios

Busca el significado de los términos...

Host virtual
Módulo de Apache

10 de 30
Curso Mentor Apache

Dominio del servidor Apache2


Nombre de dominio

Al hacer la instalación pregunta por un nombre de dominio. Por defecto le asigna localhost. Si disponemos de un nombre de dominio
cualificado y disponemos del servicio DNS configurado podremos utilizar dicho nombre en la configuración de Apache2.
En nuestro caso y para el curso, se va a trabajar con un servidor Apache2 que atiende peticiones de clientes web dentro de su propia
red  local   y   está  situado  detrás   de  un  router   que  sirve  DHCP.   El   puerto  80  sólo  escucha  dentro  de  la  red  local   que  será  la
192.168.0.0/24. Una configuración muy sencilla que responde a los requerimientos del aula.
Le asignamos internamente el nombre de dominio servidor.apache2.com y para ello se ha modificar el archivo /etc/hosts de la forma
siguiente:

127.0.0.1 localhost servidor.apache2.com servidor

11 de 30
Curso Mentor Apache

Windows: Instalación de Apache2


Preparativos para Windows

El curso utiliza Windows 7 Home Premium 86 y no requiere ningún software adicional de sistema para la instalación de Apache.
Si la instalación de Apache2 es en Windows XP requiere tener instalado el Service Pack 1. Si no se dispone de él acceder a la URL
siguiente para su descarga:
http://www.microsoft.com/windowsxp/pro/downloads/servicepacks/sp1/default.asp

Para Windows utilizamos la versión 2.2.18 que soporta perfectamente PHP5.
La  descarga  de  la  versión  con  la  que  vamos  a  trabajar  httpd-2.2.18-win32-x86-openssl-0.9.8r-r2.msi  (que  lleva  incorporado  soporte
SSL) se puede realizar desde: http://www.apache.org/dist/httpd/binaries/win32/.
La instalación de Apache2 requiere la ejecución (doble clic) del archivo descargado httpd-2.2.18-win32-x86-openssl-0.9.8r-r2.msi

A tener en cuenta ...

1. Es importante tener en cuenta que la instalación debe hacerse desde la cuenta del Administrador del sistema o desde la cuenta de
un usuario que tenga privilegios de administrador. Sólo de esta forma el servidor web Apache2 podrá ser utilizado por cualquier usuario
existente en la máquina Windows.
2. Conviene antes de hacer la instalación, asegurarse que no se tiene otra instalación previa de Apache2. Si se tiene es preferible
desinstalarla. Probablemente no ocurra nada durante la nueva instalación pero su funcionamiento puede ser impredecible.
3.Si se instala una nueva versión de Apache2 diferente de la ya existente en el sistema, hay que tener cuidado de no instalar la
nueva versión en el mismo directorio que la anterior. 

12 de 30
Curso Mentor Apache

Instalación
Instalación

La instalación de Apache2 requiere la ejecución (doble clic) del archivo descargado httpd-2.2.18-win32-x86-openssl-0.9.8r-r2.msi
La primera pantalla que se muestra es la de bienvenida, en la que se indica la versión del servidor web Apache2 que se va a instalar.

A continuación se muestran los términos de la Licencia a la que contestamos que Aceptamos (I accept).

La siguiente pantalla solicita el nombre del dominio. Si se dispone de un dominio registrado y redireccionado a la IP donde estamos
instalando  Apache2  lo  indicamos   en  Network   Domain.   Por  ejemplo  .apache2.com.   Si  no  se  dispone  de  dominio  propio  indicar
'localhost' o la IP de la máquina.

13 de 30
Curso Mentor Apache

En Server Name indicar también 'localhost' si no se dispone de dominio propio y si disponemos de dominio indicamos el nombre de
la máquina dentro de nuestro dominio (servidor.apache2.com). El nombre dado aquí sirve para que, al acceder a nuestro servidor
Apache2, se pueda eliminar la parte www y acceder directamente con apache2.com. Lo mas importante respecto a este nombre es
que  se  pueda  resolver,   es   decir,   que  un  servidor  DNS   pueda  transformar  ese  nombre  en  una  dirección  IP.   En  nuestro  caso  la
resolución se hará de forma local.
Damos la dirección de correo electrónico del administrador. Esta dirección conviene que sea real ya que a ella irán a parar todos los
mensajes de error y de los visitantes de las páginas del servidor web.
Por último, en la pantalla nos pregunta si se quiere lanzar Apache2 como un servicio para todos los usuarios escuchando en el puerto
80 (For All Users, on Port 80, as a Service), que es lo mas usual y es la opción que seleccionamos. La otra opción indica que
Apache2 sólo se lanza para el usuario actual y escuchando en el puerto 8080 (Only for the Current User, on port 8080, when
started Manually). Esta opción se suele utilizar para hacer un uso personal y de pruebas del servidor Apache o si se tiene ya otro
servidor escuchando en el puerto 80.
Esta clave identifica el directorio para la directiva ServerRoot cuyo objetivo es indicar el directorio que contiene el subdirectorio conf.
Al arrancar Apache2, éste lee en este directorio el archivo de configuración httpd.conf. Si el valor de esta clave no coincide con el
valor de ServerRoot, Apache2 siempre tomará el valor de la directiva.
Si se modifica la ubicación de los archivos de configuración hay que actualizar el directorio indicado en ServerRoot para que se pueda
localizar el archivo httpd.conf.
La  siguiente  ventana  permite  seleccionar  el  tipo  de  instalación  que  se  quiere  realizar:   Típica  o  Personalizada.   Es   conveniente
seleccionar la opción Personalizada (Custom) ya que, de esa forma se puede comprobar qué se va a instalar en nuestro equipo.

14 de 30
Curso Mentor Apache

La  instalación  muestra  la  ventana  indicando  qué  se  va  instalar  con  una  breve  descripción  y   dónde  se  va  a  instalar.   Permite  la
modificación del directorio destino (botón Change...).

Una vez configurados todos los parámetros de la instalación, comienza propiamente la instalación (pulsar el botón Install):

15 de 30
Curso Mentor Apache

A continuación se muestra una barra de progresión de la instalación indicándonos que puede tardar varios minutos.

Como se ha seleccionado la instalación de Apache2 como servicio, al terminar la instalación arranca automáticamente Apache2 al
pulsar el botón Finish:

16 de 30
Curso Mentor Apache

¿Apache2 en ejecución?

En Windows 7 hay iconos que están por defecto 'escondidos' y para acceder a ellos hay que pulsar en la barra de tareas el botón 

Comprobamos que entre los botones disponibles está el correspondiente a Apache que ha sido instalado y al finalizar la instalación es
ejecutado y por lo tanto está activo el servicio.

Dentro de la configuración de estos iconos 'escondidos' podemos indicar que se muestre siempre en la barra de tareas.

17 de 30
Curso Mentor Apache

Ahora ya podremos ver el icono de Apache2 en la barra de tareas y éste nos informará cuando está arrancado (punto interior en
verde) o parado (punto interior en rojo) el servidor web.
Pulsando sobre este botón podremos arrancar (start), parar (stop) o reiniciar (restart) el servidor web Apache2:

También podemos gestionar el servicio pulsando el botón derecho del ratón sobre el icono de Apache:

Por otra parte  y en el menú que contiene Todos los programas aparece la referencia a Apache HTTP  Server 2.2, tal y como se
muestra en la figura siguiente:

18 de 30
Curso Mentor Apache

La forma de comprobar que Apache2 se instaló correctamente y está funcionando en nuestra máquina es abrir un navegador e ir a la
URL http://localhost/ (o nombre de dominio si disponemos de él) y muestra la ventana siguiente que nos indica que todo está correcto:

Si no se visualiza la página de bienvenida anterior ir al subdirectorio logs y abrir el archivo error.log. Es posible que haya un problema
de resolución de nombres (configuración del servicio DNS) y, en ese caso probar con la URL http://127.0.0.1/
Si   se   ha   indicado   un   puerto   diferente   al   utilizado   por   defecto,   hay   que   incluirlo   en   la   URL   de   la   forma
siguiente:http://127.0.0.1:8080/
NOTA.- Hay que tener en cuenta que si este puerto se ha utilizado para otro servicio, como
puede ser un cortafuegos, habrá que reconfigurar dicho servicio para que no coincidan.

Instalación/desinstalación desde la línea de orden

La instalación y desinstalación de Apache2 desde la línea de orden es muy sencilla. Para ello ir a  Inicio > Todos los Programas >


Accesorios > Símbolo del Sistema y escribir en la terminal:
apache2 -k install

y para desinstalar ejecutar:

apache2 -k uninstall

Para realizar un test del servicio ejecutar:

19 de 30
Curso Mentor Apache

apache2 -t

Para conocer la versión del servicio ejecutar:

apache2 -V

20 de 30
Curso Mentor Apache

Arranque y parada de Apache2


Acciones sobre el servidor

El servidor Apache2 permite ejecutar sobre él las siguientes operaciones:

1. Arrancar Apache: opción start

Podemos   lanzar  el  proceso   desde   una   consola   de   Windows.   Para   ello   ir  a   Inicio   >   Todos  los  Programas  >
Accesorios > Símbolo del Sistema. y escribir en la terminal abierta

net start apache2

2. Detener Apache: opción stop

net stop apache2

3. Reiniciar el servidor: opción restart que fuerza a que Apache vuelva a leer su archivo de configuración.

net restart apache2

4. Ver los servicios activos de la máquina: opción services
5. Conexión a un servidor web remoto: opción connect que permite la administración de dicho servidor web desde la máquina
local.
6. Desconexión del servidor web remoto: opción disconnect

Desde la barra de tareas están disponibles todas estas tareas.

Desde esta ventana  se  tienen  disponibles  todas  las opciones de  arranque y  conexión  de  Apache2.   La figura anterior  muestra que
Apache está funcionando (verde) y que es posible parar o relanzar el servicio.
La figura siguiente indica que el servicio Apache2 está desactivado.

21 de 30
Curso Mentor Apache

La figura siguiente muestra los diferentes servicios del sistema, da una breve descripción de cada uno de ellos y permite conocer sus
propiedades, así como parar o relanzar el servicio.

Permite,   también,   la  conexión  a  otros  equipos  de  la  red  simplemente  proporcionando  el  nombre  de  la  máquina  a  la  que  se  quiere
conectar.

22 de 30
Curso Mentor Apache

El paso siguiente será llevar a cabo la configuración del servicio que se verá en la Unidad 3.

23 de 30
Curso Mentor Apache

Herramientas instaladas por Apache2


Archivos instalados

La   instalación   de   Apache2.2   en   Windows   7   (XP),   deja   los   siguientes   archivos   en   el   directorio   raíz   (C:\Archivos   de
programa\Apache Software Foundation\Apache2.2\) de la instalación:

Directorio Descripción

bin Contiene archivos ejecutables de Apache2

conf Contiene archivos de configuración del servidor

error Archivos con los mensajes de error del servidor

htdocs Directorio  raíz  por  defecto  del  servidor,   en  el  que  se  almacenan  los  archivos disponibles
desde el servidor

icons Contiene los iconos que utiliza el servidor

logs Contiene los registros de acceso y errores del servidor

manual Contiene el manual del Apache

proxy Contiene los archivos de la caché del servidor

Archivo Descripción

httpd.conf Archivo de configuración principal, equivalente a /etc/apache2/apache2.conf en Ubuntu y
está ubicado dentro del directorio conf.

.htaccess Se puede encontrar dentro de cualquier directorio accesible desde el servidor web.

En estos archivos se sitúan las directivas de configuración. Algunas de estas directivas de configuración pueden aparecer en ambos
archivos. Si se produce esta situación siempre prevalecen las directivas incluidas en los archivos .htaccess.
El directorio conf/ contiene los archivos de configuración. Si al hacer la instalación existen archivos de configuración en este directorio
no se sobreescriben sino que pasan a llamarse nombre.default
Ya  tenemos   nuestro  servidor  web  Apache2  instalado  tanto  en  Ubuntu  como  en  Windows   7  en  el  equipo  que  hace  la  función  de
servidor del aula y funcionando en base a una configuración por defecto que vamos a ir adaptando a nuestras necesidades.

24 de 30
Curso Mentor Apache

Glosario
Glosario Unidad 2

Concepto Definición

Ubuntu Distribución basada en Debian GNU/Linux y desarrollada por la empresa Canonical LTD.

Hilo de ejecución Los hilos son una forma de dividir la ejecución de un programa en varias tareas que se ejecutan de forma
paralela. Un proceso puede tener uno o varios hilos de ejecución.

inetd Demonio que se mantiene a la escucha en determinados puertos y lanza determinados servicios en función
de las señales recibidas. Por ejemplo, escucha en el puerto 22 y atiende las llamadas del servicio ssh.

init Es   el  primer  proceso  que  se  ejecuta  en  un  sistema  UNIX/Linux.   Utiliza  los   niveles   de  ejecución  para
establecer los servicios que ofrece el sistema (monousuario, multiusuario,...).

localhost Interfaz   de  red  ficticia  que  utiliza  el  sistema  para  comunicarse  consigo  mismo.   Se  identifica  por  lo   e
identifica la IP 127.0.0.1.

nivel de ejecución Los   sistemas   operativos   tienen   diferentes   niveles   de   ejecución   que   determinan   su   funcionalidad.   Por
ejemplo,   Ubuntu  y,   en  general  GNU/Linux  tienen  6  niveles  de  ejecución,   de  los  cuales  el  nivel  2  (es  el
habitual) indica que el sistema arranca en modo multiusuario y con red. El nivel 1 es utilizado para tareas de
administración del sistema que arranca en modo monousuario y multitarea (sin red).

PID Identificador único del proceso en el sistema. Existe mientras el proceso esté 'vivo'.

portmap Demonio  que  convierte  números   de  programas   RPC  (Llamada  a  Procedimiento  Remoto)  a  números   de
puertos de Internet. Utilizado para ciertos servicios, como NFS (Network File System).

PPID Identificador del proceso padre correspondiente. Todo proceso en el sistema tiene un proceso padre que es
quien lo genera o lanza.

root Usuario administrador del sistema. También se le llama Superusuario. El UID (identificador de usuario) de
root es 0.

servicio DNS Servicio que permite traducir nombres de máquinas a direcciones IP.

sudo Orden que permite a un usuario ejecutar órdenes Linux como administrador si el archivo /etc/sudoers está
configurado para ello.

synaptic Herramienta gráfica para la actualización de los paquetes del sistema desde Ubuntu, inclusión de nuevos
paquetes y borrado de los ya existentes

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.

25 de 30
Curso Mentor Apache

Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

26 de 30
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Página oficial de apache: http://www.apache2.es/2.2.2/

27 de 30
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 2 'Instalación'

Los puntos a destacar de esta unidad son los siguientes:

1. La instalación de Apache2 la haremos en Ubuntu desde el paquete Debian GNU/Linux. Conviene asegurarse que no existe
previamente en el sistema ningún paquete de Apache2 procedente de anteriores instalaciones.Y el usuario que ejecuta todo el
proceso es root (#) pero podría hacerlo también un usuario 'sudo', es decir con privilegios.
2. La instalación también se puede hacer desde el entorno gráfico utilizando la herramienta Synaptic
3. Los archivos y directorios creados en /etc/apache2/ en el proceso de instalación son apache2.conf como archivo de
configuración principal y conf.d/ como directorio que contiene archivos de configuración asociados a módulos específicos.
4. En Windows es importante tener en cuenta que la instalación debe hacerse desde la cuenta del Administrador del sistema o
desde la cuenta de un usuario que tenga privilegios de administrador. Sólo de esta forma el servidor web Apache2 podrá ser
utilizado por cualquier usuario existente en la máquina Windows.
5. Conviene antes de hacer la instalación, asegurarse de que no se tiene otra instalación previa de Apache2. Si se tiene es
preferible desinstalarla. Probablemente no ocurra nada durante la nueva instalación pero su funcionamiento puede ser
impredecible.
6. La instalación de Apache2.2 en Windows deja los archivos de configuración en el directorio C:\Archivos de programa\Apache
Software Foundation\Apache2.2\
7. httpd.conf es el archivo de configuración principal de Apache para Windows.

28 de 30
Curso Mentor Apache

Autoevaluación Unidad 2
Autoevaluación

El cuestionario de autoevaluación de la Unidad 2 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

29 de 30
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 2

30 de 30
Curso Mentor Apache

Apache
Unidad 3: Configuración de Apache

En este capítulo aprenderás a:
diferentes directivas generales para la configuración del servidor web Apache2.

secciones básicas con sus directivas asociadas para la configuración del servidor web Apache2 y sus características
mas relevantes.

el concepto de codificación.

a utilizar la redirección de directorios.

diferentes directivas relativas a los tipos MIME para la interpretación del contenido de los archivos transferidos entre
servidor y cliente.

detectar posibles errores de funcionamiento del servidor web.

interpretar los códigos de error del servidor web.

Material complementario:
1. Archivo con las actividades de la unidad. Archivo U3_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U3_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf

1 de 40
Curso Mentor Apache

Introducción
Objetivos

Conocer las directivas de configuración de Apache2 mas relevantes.

Conocer el contenido de los diferentes directorios generados en la


instalación de Apache2.

Identificar y crear redirecciones.

Establecer una configuración básica para el servidor web Apache2 en ambos sistemas operativos.

Saber dónde acceder ante posibles errores de funcionamiento del servidor web.

Conocimientos previos

En esta unidad abordamos la configuración inicial de Apache2. El único requerimiento es haber realizado la instalación de Apache2
en ambos sistemas operativos y haber comprobado que el servicio está activo y esperando peticiones.

Contenidos

Unidad 3: Configuración de Apache
A. Ubuntu

1. Directivas de configuración. Archivo apache2.conf
2. Directivas globales del servidor
3. Configuración del servidor principal
4. Directorio conf.d
5. Archivo ports.conf
6. UTF-8 y codificación de documentos
7. Nombre de dominio
8. Redirección de directorios
9. Tipos MIME
10. Identificación y resolución de problemas

B. Windows

1. Configuración de Apache2 en Windows
2. Códigos de respuesta del servidor Apache2

C. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 40
Curso Mentor Apache

Nota

Hay que tener en cuenta que el capítulo contiene una descripción de las directivas de configuración del servidor web Apache2 mas
significativas.   Por  este  mismo  motivo  muchas  de  ellas  son  objeto  de  un  estudio  práctico  mas  detallado  en  otros  capítulos  que
estudian aspectos mas concretos del servidor.
El alumno, por tanto, no debe sentirse desbordado por la exposición masiva de información. Estas directivas, junto con otras que se
irán introduciendo de forma paulatina, serán objeto de estudio a lo largo de las unidades de este curso.

3 de 40
Curso Mentor Apache

Ubuntu
Configuración: archivo apache2.conf

El archivo /etc/apache2/apache2.conf contiene la configuración del servidor web Apache2.

Consideraciones:

Es un archivo muy extenso y autoexplicativo. Todas y cada una de las directivas disponibles están ampliamente comentadas
incluyendo ejemplos de utilización.
La sintaxis del archivo de configuración de Apache2 permite indicar una directiva por línea en la que no se hace distinción
entre mayúsculas y minúsculas.
Las líneas que comienzan con el carácter '#' se consideran comentarios y se ignoran. No se pueden incluir comentarios en
una línea, después de una directiva de configuración.
Se puede chequear la sintaxis del archivo de configuración sin reiniciar el servidor utilizando la opción '-t' en línea de orden.
Desde una terminal ejecuta:

# /usr/sbin/apache2 -t
Syntax OK

En este apartado se van a estudiar las directivas de configuración más significativas.
Existe una guía de referencia rápida con la relación de todas las directivas disponibles en http://httpd.apache.org/docs/2.2
/en/mod/quickreference.html.
Cualquier modificación realizada sobre este archivo para que esté activa requiere la recarga (reload/restart/force-reload) del
demonio de Apache2 o la parada y arranque (stop/start).
Antes   de  efectuar  modificaciones   sobre  el  archivo  de  configuración  original  conviene  hacer  una  copia  de  seguridad  del
mismo.

Respecto al PATH:

si se especifican las rutas comenzando por '/' Apache2 entiende que se trata de un path absoluto.
si no comienza por '/' es un path relativo y se le añade el contenido de la directiva ServerRoot al inicio del path.

Actividad 3.1

Consideraciones previas a tener en cuenta en la configuración del servidor Apache2.


El administrador de Apache, antes de realizar la configuración del servidor, debe plantearse una serie de cuestiones, como son las
relativas a:
1. Módulos: comprobar cuáles son los módulos que necesita cargar el servidor para conseguir la funcionalidad deseada.
2. Propietario y grupo: por seguridad se recomienda no utilizar el usuario root como usuario propietario del proceso apache2.
Hay que disponer de un usuario y grupo para ello. En Ubuntu se dispone del usuario y grupo www-data.
3. Directorios: hay que crear los directorios en los que se alojarán las páginas web, gráficos, applets, etc, más comunes y
establecer los permisos adecuados.
4. Logs: decidir qué información se almacenará en relación a los accesos al servidor.
5. Políticas  de  acceso:   decidir  si  se  permite  a  los   usuarios   publicar  páginas   personales,   si  se  habilita  el  uso  de  páginas
dinámicas (PHP o PERL), etc.
6. Aplicaciones: tener en cuenta si se van a utilizar otras aplicaciones para la gestión del servidor, como es la obtención de
estadísticas de uso y accesos, copias de seguridad, etc.
7. Servidores virtuales: planificar la configuración de sitios virtuales que puedan ser de interés para el servicio.

4 de 40
Curso Mentor Apache

Directivas de configuración
Directivas de configuración

Las directivas de configuración están agrupadas en tres secciones:

1. Directivas globales que controlan las características del servidor. Se estudian en esta unidad.
2. Directivas que controlan el funcionamiento del servidor principal y valores por defecto para los servidores virtuales. Se
estudian en estea unidad agrupadas por secciones en los puntos que vemos a continuación.
3. Directivas  de  configuración   para  los  servidores  virtuales,   que  permiten  que  las   peticiones   web  sean  enviadas   a
diferentes servidores, ya sea mediante la IP o nombre de la máquina, y sean manejadas por el mismo proceso apache. Se
estudian en la Unidad 5.

Además de estos grupos de directivas tenemos los:

1. Archivos .htaccess que permiten a los usuarios que no tienen permisos modificar la configuración y poder ejercer así algún
control sobre el comportamiento de su parte del servidor Apache. Estos archivos se estudiarán en la Unidad 4.

5 de 40
Curso Mentor Apache

Directivas globales del servidor


Parámetros generales

ServerRoot
La directiva ServerRoot indica el directorio principal donde se encuentran todos los archivos de configuración y de trabajo del
servidor.
ServerRoot "/etc/apache2/"

PidFile
Indica el archivo en el que el servidor graba su identificador de proceso (PID).
PidFile /var/run/apache2.pid

LockFile
Establece el path a un archivo utilizado a modo de semáforo para realizar bloqueos. No suele modificarse su valor por defecto.
El PID del proceso principal del servidor se añade automáticamente al nombre del archivo.
LockFile /var/lock/apache2/accept.lock

Timeout
Determina, en segundos, el tiempo que el servidor web esperará para recibir y enviar peticiones durante la comunicación. El objetivo
es no mantener las conexiones del cliente activas indefinidamente. Por defecto:
Timeout 30

6 de 40
Curso Mentor Apache

Actividad 3.2

Comprobación de valores por defecto para las directivas


Los valores incluidos por defecto son los siguientes:
ServerRoot "/etc/apache2/"
PidFile /var/run/apache2.pid
LockFile /var/lock/apache2/accept.lock
Timeout 300

Son valores para los parámetros generales que no suelen modificarse en instalaciones habituales.
Indican respectivamente:
directorio donde se encuentran los archivos de configuración del servidor
archivo en el que el servidor graba su identificador de proceso (PID)
camino (path) al archivo utilizado como semáforo para realizar bloqueos
tiempo en segundos que el servidor web espera para recibir y enviar peticiones durante la comunicación

Comprobación de los valores para estas directivas en el archivo de configuración de Apache2 para Ubuntu.
Ejecutar
#apache2 -v
Server version: Apache/2.2.16 (Ubuntu)
Server built: Nov 18 2010 21:17:29

Configuraciones de conexiones persistentes

KeepAlive
Activa o desactiva {On | Off} la opción de servir más de una solicitud en la misma conexión. Por defecto está a On.
KeepAlive On
Esta directiva es interesante mantenerla en On ya que, de esa forma, se evita tener que establecer diferentes conexiones TCP para
diferentes peticiones procedentes de un mismo cliente web.
Las directivas siguientes configuran esta opción.
MaxKeepAliveRequests
Establece el número máximo de peticiones permitidas por cada conexión. En general se recomienda un valor alto. El valor 0 indica
un número ilimitado.
Requiere que este a ON la directiva KeepAlive.
Hay que tener en cuenta el ancho de banda de salida del servidor, ya que si se establece un valor elevado el tiempo de respuesta
aumentará para cada usuario.
Por defecto:
MaxKeepAliveRequests 100
KeepAliveTimeout
Indica  el  número  de  segundos  que  el  servidor  esperará  la  siguiente  petición  desde  la  misma  conexión.   Pasado  este  tiempo  se
considerará que se ha terminado y cerrará la conexión.

Si  el  valor  es   muy   pequeño  algunos   usuarios   no  podrán  visualizar  la  página  ya  que  el  número  máximo  de  conexiones
persistentes se ha superado.
Si se establece un valor muy grande se estarán utilizando muchos recursos de la máquina.

Por defecto:
KeepAliveTimeout 15

7 de 40
Curso Mentor Apache

8 de 40
Curso Mentor Apache

Configuración del servidor principal


Directivas

User / Group
User establece el identificador de usuario (userid) que utiliza el servidor para ejecutarse y responder a las peticiones.
El valor de User determina el tipo de acceso que tendrá el servidor web a los archivos y directorios en los que se encuentran las
páginas. Si User no puede acceder a un archivo tampoco podrá hacerlo el servidor web y, por tanto, también inaccesible al cliente
web. Por defecto:
User www-data
El proceso Apache2 padre se inicia como root y a continuación pasa al usuario www-data. El servidor debe arrancar como root. Una
vez que el servidor se ha conectado al puerto, pasa el proceso a  User porque necesita un puerto por debajo de 1024 (por
defecto 80) y los puertos por debajo de 1024 están reservados para el sistema y sólo pueden ser utilizados por el  User
antes de aceptar peticiones.
Group establece el identificador de grupo que utiliza el servidor para ejecutarse y responder a las peticiones. Por defecto:
Group www-data

ErrorLog
ErrorLog indica el archivo (ruta completa o path absoluto) donde se guardan los errores del servidor. En él se registra lo que
ocurre con Apache y sus errores. Por defecto:
ErrorLog /var/log/apache2/error.log
Cuando el servidor está generando errores y no sabemos a qué es debido conviene consultar este archivo.
Un ejemplo de línea de este archivo es la siguiente:
[Sun   May   22   13:59:02   2011]   [error]   [client   58.218.199.227]   File   does   not
exist:
/var/www/proxyheader.php

Include
Permite que se incluyan otros archivos de configuración en tiempo de ejecución. Los paths o rutas dadas de los archivos pueden ser
absolutos o relativos respecto al valor de la directiva ServerRoot.
Ejemplo:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Indica que, cuando se lance el proceso apache2 y se lea el archivo de configuración /etc/apache2/apache2.conf, al llegar a estas
dos líneas se incluirán en él, de los directorios indicados, todos los archivos cuyos nombres terminen con .load y .conf  como
parte de dicho archivo de configuración.
En el ejemplo se han indicado rutas absolutas.
Alias
Permite colocar contenido web en un directorio fuera del directorio DocumentRoot.
La sintaxis es:
Alias <url-path> <recurso>
<url-path> indica la URL del contenido web
<recurso> especifica la posición del recurso en el sistema de archivos
Ejemplo:
Alias /icons/ "/usr/share/apache2/icons/"
Indica que, si esta directiva está incluida en el archivo apache2.conf, cuando se escriba /icons/ en el navegador (http://localhost
/icons/) se accederán a los recursos del sistema ubicados en el directorio /usr/share/apache2/icons/.

Actividad 3.3

9 de 40
Curso Mentor Apache

¿Cómo comprobarías cuál es el puerto por el que está escuchando el servidor web Apache2?
Solución:
La orden netstat nos dice en qué puertos está escuchando nuestra máquina y a qué servicios está atendiendo. La orden netstat con
las siguientes opciones nos mostrará el puerto para Apache2:
# netstat -atunp | grep apache2
tcp6 0 0 :::80 ESCUCHAR :::* 4239/apache2
La salida de la orden muestra que en la dirección local está escuchando en el puerto 80 para cualquier dirección externa (*).

Secciones de configuración

Existen dos tipos de secciones de configuración:

1. Las que se evalúan para cada petición que se recibe y se aplican las directivas que se incluyen en las distintas secciones
sólo a las peticiones que se adecúan a determinadas características.
Dentro  de  este  grupo  están  <Directory>, <Files>, <Location>, <VirtualHost> entre  otras.   La  sección
<VirtualHost> se verá con detalle en la Unidad 4.
2. Las secciones de tipo <IfDefine> e <IfModule> que se evalúan sólo al inicio o reinicio del servidor. Si al iniciar el
servidor las condiciones son las adecuadas, las directivas que incluyen estas secciones se aplicarán a todas las peticiones
que se reciban. Es caso contrario, esas directivas incluidas se ignoran.

Dentro del primer grupo las secciones:

<Directory> y <Files> están relacionadas con el sistema de archivos. 


<Location> está relacionada con el espacio web.

Saber más ... sobre algunos conceptos básicos

¿Sabes cuál es la diferencia entre sistema de archivos y espacio web?

Sección Directory

La sección <Directory /path/a/directorio> / </Directory> engloba una o más directivas de configuración que sólo


se aplican al directorio y subdirectorios especificados.
El argumento /path/a/directorio puede ser:

Un nombre de directorio (ruta absoluta)
Una expresión regular

Ejemplo: líneas tomadas del archivo /etc/apache2/apache2.conf
<Directory "/usr/share/apache2/icons">
  Options Indexes MultiViews
  AllowOverride None
  Order allow,deny
  Allow from all

10 de 40
Curso Mentor Apache

</Directory>

Para  poder  interpretar  esta  sección  explicamos   las   directivas   que  se  pueden  utilizar  en  la  sección  <Directory>   y   son  las
siguientes:
Options
Activa/Desactiva las opciones del servidor en un determinado directorio.
¿Qué posibilidades hay?

Directiva Options Descripción

None No se permite ninguna opción.

All Se permiten todas las opciones menos MultiViews que debe activarse explícitamente

ExecCGI Se permite ejecutar scripts CGI usando mod_cgi

FollowSymlinks Permite  al  servidor  seguir  los   enlaces   simbólicos   entre  este  directorio  y   otro  donde  esté  el
enlace simbólico..

Indexes Permite  al  servidor  generar  un  listado  de  los   archivos   disponibles   de  un  directorio  si  no  se
especifica  el  DirectoryIndex   (por  ejemplo,   index.html).   Es   decir,   ver  el  contenido  del
directorio si no existe página de inicio.

MultiViews Permite   negociar   los   contenidos   con   el   navegador   para   elegir   la   mejor   representación   de
acuerdo  con  sus   preferencias   (idioma,   conjunto  de  caracteres,   codificación,   ...).   Utiliza  el
módulo mod_negotiation.

Reglas para la directiva Options:
Si a un directorio se le pueden aplicar varias directivas Options sólo se usa la más específica, ignorándose el resto. Las opciones
no se mezclan.

1. Si todas las opciones de la directiva Options van precedidas por el símbolo '+' o '-' se mezclarán.
2. Cualquier opción precedida por '+' se añadirá a las opciones en vigor.
3. Cualquier opción precedida por '-' se eliminará.
Ejemplo

<Directory /var/www>
Options Indexes FollowSymLinks
</Directory>

<Directory /var/www/pruebas>
Options +Includes -Indexes
</Directory>

Indica   que   el   subdirectorio   /var/www/pruebas/ del directorio /var/www tiene activadas las   opciones
FollowSymLinks e Includes, pero no estará activa Indexes.

AllowOverride
Permite especificar qué partes del servidor pueden ser establecidas en los archivos .htaccess.

AllowOverride Descripción

None Los archivos .htaccess son totalmente ignorados.

All La   configuración   del   archivo   .htaccess   sobreescribe   la   configuración   dada   en   el   sitio


correspondiente y sólo para el directorio en el que se especifica.

AuthConfig Permite  el   uso  de  directivas   relacionadas   con  la  seguridad  (AuthName, AuthType,
AuyhUserFile, Require, ...). Se estudiarán en otras unidades del curso.

FileInfo Activa   directivas   relacionadas   con   MIME   (mod_mime),   que   establecen   el   tipo   de

documento (AddType, ADDLenguage, DefaultType, ErrorDocument, ...).

11 de 40
Curso Mentor Apache

AllowOverride Descripción

Indexes Activa   directivas   para   la   visualización   de   un   directorio   (DirectoryIndex,

IndexOptions, etc ).

Limit Activa directivas que controlan el acceso al host (Allow, Deny y Order).

Options Activa   directivas   que   controlan   opciones   específicas   del   directorio   (Options y

XbitHack).

Order
Especifica el orden en que van a procesarse las directivas deny y allow.

Allow
Especifica qué hosts pueden acceder a un directorio determinado. Puede contener 'All' (permite a todos), un nombre de dominio,
una dirección IP, una red con su máscara de red, etc.

Deny
Especifica qué hosts no pueden acceder a un directorio determinado.

Actividad 3.4

Crear   un   directorio   llamado 'directorio' en /var/www/html/. En   este  directorio   denegar   la  entrada  a  todo   el
mundo y permitir a toda la red 192.168.1.0/24.
Solución:
<Directory /var/www/html/directorio>
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
</Directory>

Actividad 3.5

Impedir el acceso implícito al sistema de archivos

Solución:
Por defecto todo archivo accesible mediante URL Apache2 permite que dicho archivo esté disponible para el cliente web. Es lo que
se conoce como acceso implícito al sistema de archivos.
Por ejemplo, si como root se ejecuta la orden:
# ln -s / public_html
cualquier cliente web podría acceder a http://localhost/~root/ y recorrer totalmente el sistema de archivos.

12 de 40
Curso Mentor Apache

¿Qué habría que indicar en la configuración del servidor web para evitar esta posibilidad?
<Directory />
.............
Order deny,allow
Deny from all
</Directory>

Estas dos directivas impiden el acceso implícito al sistema de archivos.
A continuación, para dar acceso a las zonas del S.A. que interesa habría que incluir secciones Directory específicas. Por ejemplo,
a la parte pública de los home de usuarios lo haríamos en el archivo /etc/apache2/mods-available/userdir.conf:
<Directory /var/www/*/public_html>
......................
Order deny,allow
Allow from all
</Directory>

Sección Files

Las   directivas   incluidas   en  una  sección  <Files>   se  aplican  al  archivo  especificado  sin  tener  en  cuenta  en  qué  directorio  se
encuentra.   Es   decir,   la  directiva  <Files>   limita  el  ámbito  de  aplicación  de  las  directivas  que  incluye  según  el  nombre  de  los
archivos.
En  el  ejemplo  siguiente  las  directivas  de  configuración,   cuando  se  colocan  en  la  sección  principal  del  archivo  de  configuración,
deniegan el acceso a cualquier archivo llamado privado.html sin tener en cuenta donde se encuentre.
<Files privado.html>
Order allow,deny
Deny from all
</Files>
El argumento de <Files> puede ser un nombre de archivo, o una expresión regular. Por ejemplo, para indicar que el argumento es
cualquier archivo con formato gif, jpg, jpeg o png utilizaríamos la siguiente expresión regular:
<Files ~ "\.(gif|jpe?g|png)$">
donde  '?'   sustituye  0  o  una  ocurrencia  de  la  expresión  regular   anterior   (1  carácter),   '*'   equivale  a  cualquier   secuencia  de
caracteres, '$' indica final de línea y la '\' se utiliza para escapar el carácter '.'.
Se puede utilizar la sección <FilesMatch> para trabajar con expresiones regulares.
También  se  pueden  utilizar   de  forma  conjunta  las   secciones   <Directory>   y   <Files> para  referirse  a  archivos   que  se
encuentran en un determinado lugar del sistema de archivos. Por ejemplo:
<Directory /var/www/dir1/>
<Files privado.html>
Order allow,deny
Deny from all
</Files>
</Directory>
que denegará el acceso a /var/www/dir1/privado.html y cualquier otra aparición de privado.html que se encuentre en
/var/www/dir1/ o cualquiera de sus subdirectorios.

Sección Location

La  sección  <Location>   está  relacionada  con  el  espacio  web  y  cambia  la  configuración  para  el  contenido  del  espacio  web.   Por
ejemplo:
<Location /privado>
Order Allow,Deny
Deny from all

13 de 40
Curso Mentor Apache

</Location>
Esta configuración evita que se acceda a cualquier URL que empiece por /privado, utilizándose la palabra privado como expresión
regular. Por ejemplo se aplicaría a peticiones que comiencen o contengan /privado en su URL (http://localhost/privado123).

Saber mas ... sobre Location

¿Cuándo se tienen que utilizar secciones que se apliquen sobre el sistema de archivos y cuando usar secciones que se apliquen
sobre el espacio web?.

Sección IfModule

La sección IfModule engloba directivas que se procesarán si el módulo dado como argumento se compila con Apache2.
Una de las directivas permitidas en IfModule es UserDir.
<IfModule mod_userdir.c>
Userdir directorio
</IfModule>

UserDir
UserDir   indica  el  nombre  del  subdirectorio,   dentro  del  directorio  home  de  cada  usuario,   donde  estarán  los   archivos   HTML  que
podrán ser servidos por Apache. Por defecto, el subdirectorio es public_html.
Por ejemplo, el servidor podría recibir la siguiente petición:
http://localhost/usuario/prueba.html
El servidor buscaría el archivo: /home/usuario/public_html/prueba.html donde /home/usuario/ es el directorio del usuario.
Hay que asegurarse que los permisos sean los adecuados:

En los directorios de usuario deben ser 755.
En el directorio public_html deben estar activados los bits de lectura (r) y ejecución (x) (0755).
Los permisos con que se servirán los archivos desde public_html deben ser 0644 por lo menos.

Sección IfDefine

IfDefine engloba directivas que serán procesadas sólo si se cumple una determinada condición (test) al iniciar el servidor.
<IfDefine [!]nombre_parametro>
</IfDefine>

IfDefine se usa para marcar directivas que son condicionales.
Las directivas que hay dentro de una sección <IfDefine> se procesan sólo si el test devuelve un resultado positivo.
Si el test produce un resultado negativo todo lo que haya entre los marcadores de comienzo y final será ignorado.
El test puede ser:

nombre-parametro: las directivas se procesan sólo si el parámetro llamado nombre-parametro está definido.

14 de 40
Curso Mentor Apache

!nombre-parametro: hace lo contrario, y procesa las directivas sólo si nombre-parametro no está definido.

El argumento nombre-parametro se define cuando se ejecuta Apache2 por la línea de órdenes con la opción -Dparametro, al iniciar
el servidor.
Ejemplo:
#apache2 -DReverseProxy ...
# en el archivo apache2.conf
<IfDefine ReverseProxy>
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/libproxy.so
</IfDefine>

Indica que se cargan los módulos mod_rewrite y libproxy, ya que, en el archivo de configuración existe la directiva
IfDefine relativa al parámetro ReverseProxy con el que se ha lanzado la ejecución de Apache (-D).

15 de 40
Curso Mentor Apache

Directorio conf.d
Ajustes de la configuración

El directorio conf.d contiene ajustes y configuraciones específicas del administrador.
Se puede hacer un ajuste en la configuración sin modificar el archivo principal de configuración utilizando un archivo con extensión
*.conf dentro del directorio /etc/apache2/conf.d/.
Por   ejemplo,   queremos   añadir   un   Alias   para   un   directorio   (que   suponemos   que   existe   y   tiene   contenido)   localizado   en
/var/ftp/pub/ y queremos visualizarlo como el directorio /pub/ en Apache2.
Normalmente se utilizan los Alias para asociar direcciones URL con directorios que no pertenecen al directorio DocumentRoot.
Para   ello   creamos   un   archivo   que   llamaríamos,   por   ejemplo,   /etc/apache2/conf.d/aliases.conf   con   el   siguiente
contenido:
Alias /pub /var/ftp/pub
Al acceder hacia este nuevo directorio virtual con el navegador vemos que no está permitido el acceso. Para poder acceder deberá
haber un documento índice en el interior (index.html, index.php, etc), o bien, que dicho directorio sea configurado para mostrar el
contenido del siguiente modo:
<Directory "/var/ftp/pub">
  Options Indexes Includes FollowSymLinks
  AllowOverride all
</Directory>

La directiva:

Indexes indica que se deberá mostrar el contenido del directorio.
FollowSymLinks posibilita la colocación de enlaces simbólicos dentro del directorio, los cuales se seguirán.
Includes especifica que se permite la utilización de los SSI (Server Side Includes) que posibilitan utilizar funciones como
autenticación.
AllowOverrride permite utilizar archivos .htaccess.

Reiniciar o recargar Apache2 y acceder hacia http://localhost/pub/ con el navegador. Comprobar el resultado.

Busca el significado de los términos...

SSL (Secure Sockets Layer)


SSI (Server Side Includes)

16 de 40
Curso Mentor Apache

Archivo ports.conf
¿Qué contiene?

El archivo ports.conf contiene la información necesaria para que Apache2 escuche en direcciones IP y puertos específicos.
Cuando Apache2 se inicia comienza a esperar peticiones entrantes en determinados puertos y direcciones de la máquina en la que
se  está  ejecutando.   Sin  embargo,   si   se  quiere  limitar  la  escucha  a  un  determinado  puerto  (o  varios),   en  unas   determinadas
direcciones, o en una combinación de ambos, hay que especificarlo.
Esto se puede, además, combinar con la posibilidad de usar hosts virtuales, funcionalidad con la que un servidor Apache puede
responder a peticiones en diferentes direcciones IP, diferentes nombres de hosts y diferentes puertos.
Directivas asociadas:
Listen
La directiva Listen indica al servidor que acepte peticiones entrantes solamente en los puertos y en las combinaciones de puertos
y direcciones IP que se especifiquen.
Si  sólo  se  especifica  un  número  de  puerto  en  la  directiva  Listen el  servidor  escuchará  en  ese  puerto,   a  través  de  todas  las
interfaces de red de la máquina.
Si  se  especifica  una  dirección  IP   y   un  puerto,   el  servidor  escuchará  solamente  en  la  interfaz   de  red  a  la  que  pertenezca  esa
dirección IP y solamente en el puerto indicado.
Se pueden usar varias directivas Listen para especificar varias direcciones IP y puertos de escucha. El servidor responderá a las
peticiones de todas las direcciones y puertos que se incluyan.
Por ejemplo, para hacer que el servidor acepte conexiones tanto en el puerto 80 como en el puerto 8000, se puede usar:
Listen 80
Listen 8000
Para hacer que el servidor acepte conexiones en dos interfaces de red y puertos específicos, usar
Listen 192.168.1.1:80
Listen 192.168.1.5:8000

17 de 40
Curso Mentor Apache

UTF-8 y codificación de documentos


Tipos de codificación

En ocasiones los documentos HTML no se muestran correctamente por tener problemas respecto al tipo de codificación utilizada
(UTF-8, ISO-8859-1, etc.) y, por ejemplo, los caracteres latinos no aparecen correctamente.
UTF-8 (8-bit Unicode Transformation Format) es una codificación de caracteres de longitud variable para Unicode creado por Rob
Pike y Ken Thompson.
UTF-8 usa grupos de bytes para representar el estándar de Unicode para los alfabetos de muchos de los lenguajes del mundo.
UTF-8 es especialmente útil para la transmisión sobre sistemas de correo de 8 bits. (es.wikipedia.org/wiki/UTF-8).

En la actualidad se está pasando al sistema de codificación UTF-8, pero aún hay mucho contenido codificado en ISO-8859-1.
Para  mantener  el   antiguo   sistema  de  codificación   se  puede  desactivar  la  función  en  Apache  que  establece  UTF-8  como
codificación predefinida.
Para ello editar el archivo /etc/apache2/apache2.conf y localizar:

AddDefaultCharset UTF-8

Ahora cambiar por:

AddDefaultCharset Of

18 de 40
Curso Mentor Apache

Nombre de dominio
Utilización de un nombre de dominio

Si en lugar de trabajar con Apache2 haciendo siempre referencia a localhost el usuario prefiere familiarizarse con la utilización del
nombre del servidor, se puede hacer de forma sencilla.
Para ello hay que hacer referencia a los hosts virtuales que se verán con detalle en el Capítulo -5-. Pero de momento, podemos
resolverlo sin necesidad de entrar en excesivos detalles.
Planteamos,   entonces,   la   conveniencia   de   llamar   a   nuestro   servidor   web   Apache2   (que   estamos   configurando)   como
servidor.apache2.com de forma que, al abrir el navegador podamos indicar como URL la siguiente:
http://servidor.apache2.com
¿Qué debemos hacer?
1. Editar el archivo /etc/hosts y en la línea de localhost añadir este nombre, quedando de la forma siguiente:

127.0.0.1 localhost servidor.apache2.com servidor

    En definitiva lo que hemos hecho es crear un alias a localhost.
2. Editar el archivo /etc/apache2/sites-available/default e incluir la directiva ServerName dentro del único host virtual
existente y por defecto con el valor anterior:

ServerName servidor.apache2.com

Si ahora abrimos el navegador y vamos a la URL http://servidor.apache2.com comprobamos que nos dirige al mismo
contenido que localhost.

It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.

19 de 40
Curso Mentor Apache

Redirección de directorios
Redireccionamiento

Se puede configurar un directorio para que él y su contenido sean redirigidos de modo transparente hacia cualquier otra dirección.
Para ello se utiliza la directiva Redirect:

Redirect 301 /webmail http://servidor.apache2.com/

En el ejemplo se indica que, si un usuario trata de acceder al subdirectorio /webmail en el servidor, Apache2 le deberá redirigir
hacia http://servidor.apache2.com/.
El número 301 corresponde al mensaje del protocolo HTTP para indicar que la redirección es permanente.
Si  en  /webmail   hubiese  un  archivo,   como  por  ejemplo  /webmail/pruebas/pruebas.php,   Apache2  hace  el  redireccionamiento
transparente hacia http://servidor.apache2.com/pruebas/pruebas.php.
Hay que tener en cuenta que el segundo argumento es una dirección URL completa que puede estar en otro servidor.
Existen varios tipos de redireccionamiento que se indican a través de una clave:

temp (302): el redireccionamiento es temporal cuando el contenido solicitado no está en el lugar dado, pero lo estará en
el futuro. Apache2 recuerda la URL dada para futuras búsquedas de ese contenido. Se suele utilizar en páginas que están en
construcción.

Redirect 302 /hola.html http://servidor.apache2.com/hola.html

permanent (301): el redireccionamiento es permanente cuando el contenido solicitado está en la nueva dirección dada y
que Apache2 recordará.

Redirect 301 /hola.html http://servidor.apache2.com/hola.html

gone (410): el contenido solicitado no está donde se espera que esté ya que ha sido eliminado definitivamente. Esta
opción se diferencia del código de respuesta 404 Not found que identifica un error. El código 410 indica que no está allí, pero
antes estaba el contenido.

Redirect 410 /hola.html

seeother  (303):   este  redireccionamiento  indica  al  cliente  web  que  el   contenido  original   no  está  donde  se  supone  que
debía de estar y que se ha sustituido por otro en otra ubicación.

Redirect 303 /hola.html http://servidor.apache2.com/adios.html

Indica que el archivo hola.html se ha sustituido por adios.html.

Saber mas ... sobre Redirect

¿Que diferencia hay entre la directiva Alias y la directiva Redirect?

Actividad 3.5

20 de 40
Curso Mentor Apache

Enunciado: Interpretar la siguiente línea de redirección:

Redirect /ejemplos http://servidor2/nuevo_sitio
Solución:
Si /ejemplos es un directorio ubicado, por ejemplo, en http://servidor1 la solicitud hecha sobre un archivo
hola.html del directorio ejemplos será redireccionada a la dirección http://servidor2/nuevo_sitio/hola.html.
Si se añade el tipo de redirección 301, ésta será permanente.

Redirect 301 /ejemplos http://servidor2/nuevo_sitio

21 de 40
Curso Mentor Apache

Tipos MIME
Directivas relacionadas

Algunas directivas relacionadas con los tipos MIME son:
TypesConfig
La directiva TypesConfig indica el nombre del archivo que contiene la lista de tipos MIME que conoce el servidor. No puede estar
dentro de ninguna sección y está asociada al módulo mod_mime.
Para  añadir  algún  tipo  de  extensión  y  tipo  MIME,   como  por  ejemplo  Ogg  (es un  formato  de  audio   de  propósito  general,   con
compresión), se puede generar un archivo que podemos llamar /etc/apache2/conf.d/extensiones.conf con el contenido:
AddType application/ogg .ogg
AddDescription "Ogg Vorbis Audio" .ogg
AddIcon /icons/sound2.png .ogg

DefaultType
La directiva DefaulType indica el tipo MIME que se utilizará por defecto, si no se conoce la extensión del archivo que se está
sirviendo. Por defecto es archivo en texto plano (valor text/plain).
La directiva se puede encontrar fuera de cualquier sección, dentro de una sección o dentro de un archivo .htaccess.

22 de 40
Curso Mentor Apache

Resolución de problemas
Identificación y resolución de problemas

Se nos plantea la cuestión ¿y qué hacer cuando se presenta un problema?

En primer lugar se debe consultar el registro de errores: es posible que el problema pueda deducirse de un mensaje de error.
El archivo de registro de errores se encuentra en /var/log/apache2/error.log.
Se recomienda mostrar los archivos de registro en una consola mientras se accede al servidor para ver cómo reacciona éste
en cada momento. Con este fin, ejecute en una consola el siguiente comando como root.
Ejecutar la orden:

# tail -f /var/log/apache2/*.log

Consultar la base de datos de fallos en la página web http://httpd.apache.org/bug_report.html.

Consultar en las listas de correo y los foros de noticias.

La lista de correo para los usuarios de Apache está disponible en http://httpd.apache.org/userslist.html.

Los foros de noticias, se recomienda comp.infosystems.www.servers.unix.

23 de 40
Curso Mentor Apache

Windows
A tener en cuenta ...

1. Es importante tener en cuenta que muchos de los contenidos explicados para Ubuntu son también de aplicación para
Windows. Por ese motivo, siempre y en cada unidad, la parte de Ubuntu es mas extensa.
2. Hay que tener en cuenta que Apache2 para Windows no ha sufrido tantas modificaciones como la versión para GNU/Linux.
En concreto sigue existiendo la directiva ServerRoot, los módulos se cargan desde httpd.conf, etc. Es decir, el estilo de
la configuración es similar al de Apache1.

Configuración de Apache2

El  archivo  de  configuración  es   httpd.conf  y   está  localizado  (según  el  proceso  de  instalación)  en  el  directorio  C:/Archivos  de
programa\/pache Group/Apache2/conf/.
También está disponible a través del menú de inicio de Windows:
Inicio  >   Todos  los  programas  >   Apache  HTTP   Server   2.2  >   Configure  Apache  Server   >   Edit  the  Apache  httpd.conf
Configuration File
En  el  archivo  httpd.conf  de  Windows   se  incluyen  al  final  un  grupo  de  sentencias   Include  de  los   archivos   de  configuración
específicos   que   añaden   nueva   funcionalidad   o   modifican   la   configuración   por   defecto   del   servidor   web.   Estos   archivos   de
configuración están en el directorio conf/extra/.
El funcionamiento de las directivas que se incluyen en el archivo httpd.conf es el mismo que esas mismas directivas en el archivo
apache2.conf y, por lo tanto, sólo se va a incidir sobre aquellas que tengan un especial interés por sus valores particulares o por su
especial significado.
Pero, sin embargo, en Windows otras directivas están distribuidas en otros archivos de configuración incluidos en conf/default/ y
las respectivas adaptaciones en conf/extra/.
Se   recomienda   repasar   las   directivas   explicadas   desde   Ubuntu   o   visitar   la   web   oficial   de   Apache2   (http://httpd.apache.org
/docs/2.2/).
El archivo httpd.conf está dividido en cuatro secciones:

1 Directivas globales
2 Directivas de Funcionamiento
3 Carga de módulos
4 Includes

Algunas directivas son generales o globales para la instalación y funcionamiento de Apache2. Otras directivas se pueden configurar
de forma independiente para determinados directorios y/o archivos. En este caso las directivas están incluidas en secciones que
determinan el ámbito de aplicación de dicha directiva.
Entre   las   secciones   más   importantes   tenemos   las   ya   estudiadas   desde   Ubuntu   GNU/Linux:   <Directory>,
<DirectoryMatch> que funciona como <Directory> pero admite como nombre de directorio expresiones regulares, <Files> y
<FilesMatch> (igual que antes pero para archivos) y <Location> y <LocationMatch>.

24 de 40
Curso Mentor Apache

Directivas globales
Directivas globales básicas incluidas en httpd.conf

ServerRoot
La directiva ServerRoot indica el directorio principal donde se encuentran todos los archivos de configuración y de trabajo del
servidor. Por defecto, la misma ruta que la de instalación.
Por defecto:
ServerRoot "C:/Archivos de programa/Apache Software Foundation/Apache2.2"
DocumentRoot
La directiva DocumentRoot indica el directorio principal que contiene la estructura de directorios visible desde la web.
Por defecto:
DocumentRoot "C:/Archivos de programa/Apache Software Foundation/Apache2.2
/htdocs"
DirectoryIndex
La directiva DirectoryIndex indica los archivos que admite el servidor web como archivos de inicio del sitio web.
Por defecto:
<IfModule dir_module>
   DirectoryIndex index.html
</IfModule>
Esto   quiere   decir   que   cuando   se   acceda   a   una   URL,   por   ejemplo,   http://www.educacion.gob.es/   se   está   accediendo   a
http://www.educacion.gob.es/portada.html en este caso DirectoryIndex será portada.html.
Se  puede  indicar  mas   de  un  archivo  y   la  precedencia  está  asociada  al  orden  de  aparición.   Es   decir,   si  aparecen  index.html,
index.php, archivo.html, como primera opción se buscará index.html y se mostrará su contenido como inicio de la web dada. Si
no se encontrara se buscaría index.php, etc.
Esta directiva puede encontrarse dentro de cualquier sección o dentro de un archivo .htaccess.
ErrorLog
La directiva ErrorLog indica la localización del archivo log de errores.
Por defecto:
ErrorLog "logs/error.log"
LogLevel
La directiva LogLevel indica los tipos de errores que se quieren almacenar en el archivo error.log1 . Posibles valores son: debug,
info, notice, warn, error, crit, alert, emerg. Está asociada al módulo core.
Por defecto:
LogLevel warn
CustomLog
La directiva CustomLog admite varios parámetros y, dependiendo de ellos, tiene una funcionalidad.

Parámetros Descripción
common Indica el camino completo del archivo en el que se almacena los accesos al servidor web,
llamado access.log.

referer Indica el camino completo del archivo donde se guardará la URL que da origen a la visita al
servidor web, logs/referer.log.

agent Indica   el   camino   completo   del   archivo   donde   se   almacenan   los   diferentes   tipos   de
navegadores con los que se visita el servidor web y el sistema operativo, logs/agent.log.

combined Indica a Apache que se quieren los tres tipos de logs, common, referer y agent, en un
mismo  archivo. Por defecto está comentado y, de esa forma, se almacenará en archivos
diferentes.

Por defecto:

25 de 40
Curso Mentor Apache

CustomLog "logs/access.log" common


Listen
La directiva Listen indica al servidor que acepte peticiones entrantes solamente en los puertos y en las combinaciones de puertos
y direcciones IP que se especifiquen.
Si  sólo  se  especifica  un  número  de  puerto  en  la  directiva  Listen el  servidor  escuchará  en  ese  puerto,   a  través  de  todas  las
interfaces de red de la máquina.
Si  se  especifica  una  dirección  IP   y   un  puerto,   el  servidor  escuchará  solamente  en  la  interfaz   de  red  a  la  que  pertenezca  esa
dirección IP y solamente en el puerto indicado.
Por defecto:
Listen 80

26 de 40
Curso Mentor Apache

Directivas de Funcionamiento
Directivas de funcionamiento incluidas en httpd.conf

Sección Directory
La sección <Directory /path/a/directorio> / </Directory> engloba una o más directivas de configuración que sólo se aplican
al directorio y subdirectorios especificados. Puede ser:

Un nombre de directorio (ruta absoluta)
Una expresión regular

Ejemplo:

<Directory "C:/Archivos de programa/Apache Software Foundation/Apache2.2/htdocs">


Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Sección Files
Las directivas incluidas en una sección <Files> se aplicarán a cualquier archivo especificado, sin tener en cuenta en
qué directorio se encuentra. Es decir, la directiva <Files> limita el ámbito de aplicación de las directivas que incluye
según el nombre de los archivos.
En   el  ejemplo   siguiente   las   directivas   de   configuración,   cuando   se   colocan   en   la   sección   principal  del  archivo   de
configuración,   deniegan   el   acceso   a   cualquier   archivo   llamado   privado.html   sin   tener   en   cuenta   donde   se
encuentre.
<Files privado.html>
Order allow,deny
Deny from all
</Files>

En ocasiones esta sección se incluye dentro de una sección <Directory> para remarcar un tratamiento especial con un archivo.

Sección IfModule

La sección IfModule engloba directivas que se procesarán si el módulo dado como argumento se compila con Apache2.
Ejemplo:
<IfModule mod_mime_magic.c>
MIMEMagicFile share/magic
</IfModule>
Si el módulo mod_mime_magic.c está compilado en Apache2, en esta sección IfModule la directiva MIMEMagicFile le dice
al módulo mod_mime_magic.c donde está el archivo de los trucos: share/magic en este caso.
El módulo mod_mime_magic puede compararse al comando UNIX  file, que examina los primeros bytes de un archivo, y usa
"números mágicos" y otros trucos para decidir el tipo MIME del archivo.
El módulo mod_mime_magic no está compilado por defecto.
Si delante del nombre del módulo aparece una "!" (exclamación) las directivas incluidas son procesadas sólo si el módulo indicado en
la etiqueta <IfModule> no está compilado.
Es importante tener en cuenta que, cada vez que se lleve a cabo una modificación sobre alguno de los valores actuales de las
directivas,   se  comenten  algunas   de  ellas   o  se  activen,   habrá  que  reiniciar  el  servicio  Apache  para  que  dichos   cambios   estén
disponibles. Para ello habrá que parar el servicio utilizando la opción Stop del Apache Service Monitor (botón derecho sobre el
icono) y a continuación volver a lanzar el servicio seleccionando la opción Restart:

27 de 40
Curso Mentor Apache

Carga de módulos
Carga de módulos

LoadModule

La directiva LoadModule permite que Apache2 'sepa' que se le ha incorporado de forma dinámica el módulo correspondiente.
LoadModule alias_module modules/mod_alias.so

Si la carga del módulo lleva alguna configuración específica, ésta debe ir dentro de una sección <IfModule>.

<IfModule alias_module>
ScriptAlias /cgi-bin/ "C:/Archivos de programa/Apache Software
Foundation/Apache2.2/cgi-bin/"
</IfModule>

28 de 40
Curso Mentor Apache

Includes
Includes

Include

La  directiva  Include  situada  en  el   archivo  de  configuración  general   httpd.conf,   añade  o  concatena  el   contenido  del   archivo
especificado con el contenido del archivo httpd.conf.

Include conf/extra/httpd-ssl.conf
Hay que ir con cuidado con los valores incluidos ya que, en función de ellos, el archivo puede crecer de forma
descontrolada.

29 de 40
Curso Mentor Apache

Apache2 + IIS
Apache 2 e Internet Information Services

En Windows tiene especial importancia saber si se tiene otro servidor web configurado, como es el caso del IIS.
Si  es  así   la  ejecución  de  Apache  puede  dar  problemas  y  mostrar  un  mensaje  en  el  que  se  indica  que  no  se  pueden  tener  dos
servidores web escuchando en el puerto 80. Lo mejor en este caso es parar el servidor IIS (si se tiene instalado) y, para ello, hay
que ir a:
Panel de control > Herramientas administrativas > Servicios de Internet > Information Server
Desde la consola de administración del sistema parar (STOP) el servicio.
Este caso es importante tenerlo en cuenta en Windows 2003/2008 Server que instala por defecto IIS.

30 de 40
Curso Mentor Apache

Actividades
Actividad 3.6

Conocer la directiva AccessFileName

Solución:
La directiva AccessFileName indica cuál es el nombre del archivo de configuración que se buscará en cada una de los directorios
del  servidor  para  conocer  la  configuración  del  mismo.   Este  archivo  permite  configurar  el  comportamiento  de  cada  uno  de  los
directorios individualmente.
Para que esta configuración funcione, la directiva AllowOverride tiene que tener un valor que lo permita.
Esta directiva AccessFileName no puede estar dentro de ninguna sección y por defecto su valor es el archivo .htaccess.
Como medida de seguridad, la configuración de Apache establece que no se muestre la existencia de este archivo a ningún usuario,
aunque esté activa la opción de listado de directorios.
En la sección Files siguiente se establece que todos los archivos que comiencen por .ht no se muestren:
<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
</Files

Actividad 3.7

Queremos conocer quien es el propietario de la carpeta htdocs.

Solución:
Para conocer quién es el propietario de la carpeta htdocs en Windows hay que abrir el Explorador de archivos y en Equipo localizar
la Unidad C.
Al  abrir  C  localizamos  la  carpeta  de  Apache Software Foundation  y  situándonos  sobre  la  carpeta  htdocs  pulsamos  el
botón derecho y seleccionamos las Propiedades.

31 de 40
Curso Mentor Apache

Abrimos las Opciones avanzadas: 

Comprobamos que el propietario de la carpeta htdocs es el grupo Administradores.

32 de 40
Curso Mentor Apache

33 de 40
Curso Mentor Apache

Códigos de respuesta
Categorías de códigos de respuesta

Los  códigos  de  respuesta  del  servidor  Apache2  (tanto  para  Ubuntu  como  para  Windows)  están  formados  por  tres  dígitos  y  se
dividen en 5 categorías, dependiendo del tipo de mensaje.
Estas categorías se diferencian entre sí por el primer dígito del código:

1xx: mensajes informativos
2xx: mensajes de operaciones correctas
3xx: mensajes de redirección
4xx: mensajes de error en el cliente
5xx: mensajes de error en el servidor

La tabla siguiente describe los códigos de respuesta mas usuales:

Código de respuesta Significado
200 OK La solicitud se ha realizado correctamente.

201 Created Se ha almacenado correctamente en el servidor un nuevo archivo utilizando el método POST.

202 Accepted La solicitud se ha recibido y está siendo procesada actualmente.

204 No Content La  solicitud  ha  tenido  éxito  pero  no  se  registran  cambios   en  la  página  actual  que  se  muestr
cliente.

301Moved Permanently La  página  solicitada  se  ha  eliminado  de  forma  permanente  y  las  futuras  referencias  a  esa  pá
deberían usar la nueva URL que se indica.

302 Moved Temporarily La página solicitada ha cambiado de ubicación temporalmente y las futuras referencias a esta pá
deberían seguir usando la misma URL, pero la conexión actual será redirigida.

304 Not Modified La versión de la página en la caché es igual a la página solicitada.

400 Bad Request La solicitud del cliente contiene una sintaxis incorrecta.

401 Unauthorized El cliente ha dado una combinación de nombre de usuario/contraseña incorrecta.

402 Payment Required El cliente debe indicar una forma de realizar una transacción económica.

403 Forbidden Control de acceso denegado para la solicitud del cliente.

404 Not Found La página solicitada no existe en el servidor.

500 Internal Server Error Este código de error, que normalmente aparece al ejecutar una script CGI, indica que dicho sc
contiene código incorrecto o se le ha introducido una entrada que no puede procesar.

501 Not implemented La solicitud se ha hecho con un método (GET, POST, PUT, DELETE, HEAD) no conocido po
servidor.

502 Bad Gateway Usando  el  servidor  web  como  proxy   se  ha  encontrado  un  error  al  cursar  la  solicitud  a  un  h
externo.

503 Service Unavailable El servidor está procesando actualmente demasiadas solicitudes.

505 HTTP Version La versión de la solicitud (por ejemplo HTTP/Not supported 1.0 HTTP/1.1) no es conocida po
servidor.

34 de 40
Curso Mentor Apache

Glosario
Glosario Unidad 3

Concepto Definición

Comando de configuración que controla uno o más aspectos del comportamiento de Apache.
Directiva

Forma de describir un modelo de texto. Por ejemplo, "todas las palabras que empiezan con la letra "A" o
Expresiones   Regulares "todos los números de teléfono que contienen 10 dígitos".
(Regex) Las  Expresiones  Regulares  son  útiles  en  Apache  porque  permiten  aplicar  ciertos  atributos  a  grupos  de
archivos o recursos de una forma flexible.

Permite servir diferentes sitios web con una sola entidad de Apache.
Host Virtual
El  hosting  virtual  de  IPs   diferencia  los   sitios   web  basándose  en  sus   direcciones   IP,   mientras   que  el
hosting virtual basado en nombres usa solo el nombre del host y de esta manera puede alojar muchos
sitios web con la misma dirección IP.
Ver Unidad 5.

Hyper  Text   Markup  Language.   Lenguaje  que  permite  definir  el  contenido  y  su  presentación  para  que  el
HTML cliente web permita visualizar la información que contiene. Dicho lenguaje permite la inclusión de medios
(gráficos, sonidos, vídeos, etc.).

Una manera de describir el tipo de documento a ser transmitido. Su nombre viene del hecho de que su
MIME-type formato se toma de las Extensiones del Multipurpose Internet Mail.
Consiste en dos componentes, uno principal y otro secundario, separados por una barra. Algunos ejemplos
son text/html, image/gif, y application/octet-stream.
En HTTP, el tipo MIME se transmite en la cabecera del Tipo Contenido.

Parte independiente de un programa.
Módulo
La mayor parte de la funcionalidad de Apache está contenida en módulos que pueden incluirse o excluirse.
Los módulos que se compilan con el binario httpd de Apache se llaman módulos estáticos, mientras que
los que se almacenan de forma separada y pueden ser cargados de forma opcional, se llaman módulos
dinámicos.

35 de 40
Curso Mentor Apache

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

36 de 40
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Configuración global del servidor: http://httpd.apache.org/docs/2.0/es/server-wide.html
3. Introducción a los servidores web: http://www.cibernetia.com/
4. Conceptos sobre servidores web: http://trevinca.ei.uvigo.es/

37 de 40
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 3 'Configuración'

Los puntos a destacar de esta unidad son los siguientes:

1. Antes de comenzar a configurar hemos de conocer qué son las directivas de configuración, cómo se agrupan y cuál es el
significado de las más relevantes.
2. La unidad presenta las diferentes directivas explicando su significado en base a los valores por defecto que tienen asignadas.
3. Se explican las secciones mas importantes de los archivos de configuración tanto de Ubuntu como de Windows.
4. Se establecen las diferencias en el modo de configuración entre Ubuntu y Windows.
5. Se hace especial mención a ciertas secciones que condicionan la presencia/ausencia de determinadas directivas.
6. Se explica el contenido de los directorios que contienen las personalizaciones en la configuración que realizan los
administradores.
7. Se explica la redirección de directorios, cómo se realiza y para qué sirve.
8. Se incluyen los codigos de respuesta del servidor Apache así como se explica la forma de detectar posibles problemas y
localizarlos.

38 de 40
Curso Mentor Apache

Autoevaluación Unidad 3
Autoevaluación

El cuestionario de autoevaluación de la Unidad 3 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

39 de 40
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 3

40 de 40
Curso Mentor Apache

Apache
Unidad 4: Módulos de Apache
En este capítulo aprenderás:
el concepto de módulo para un servidor web y los diferentes tipos.
cuáles son los módulos básicos de Apache2 incluidos por defecto en el proceso de instalación.
cómo se manejan los módulos de Apache2, su activación y desactivación.
la descripción básica de otros módulos de Apache2 que el usuario puede incluir en la configuración de su servidor web.
las características fundamentales y las directivas asociadas al módulo userdir.
el objetivo, creación y utilización de los archivos .htaccess.

Material complementario:

1. Archivo con las actividades de la Unidad 4. Archivo U4_Actividades.pdf


2. Mapa conceptual del capítulo. Archivo U4_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf

1 de 24
Curso Mentor Apache

Introducción
Objetivos

Conocer el concepto de módulo y las ventajas de su utilización.

Conocer los diferentes tipos de módulos disponibles para Apache2.

Identificar los módulos mas usuales en Apache y su funcionamiento.

Utilizar diferentes mecanismos y/o herramientas para la activación/desactivación de los módulos.

Utilizar el modulo mod_userdir aplicandolo en diferentes supuestos.

Utilizar los archivos .htaccess.

Conocimientos previos

En esta unidad abordamos la configuración y utilización de módulos de Apache2.
Es   importante  haber  utilizado  las   principales   directivas   de  configuración  y   estar  familiarizado  con  los   archivos   de  configuración  de
Apache2. 

Contenidos

Unidad 4: Módulos de Apache2
A. Ubuntu

1. Definición de módulo y clasificación
2. Descripción de los módulos básicos.
3. Activación/Instalación de módulos.
4. Módulo mod_userdir
5. Otros módulos de Apache2
6. Archivos .htaccess

B. Windows

1. Módulos de Apache2 en Windows
2. Archivos .htaccess

C. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 24
Curso Mentor Apache

Nota

Hay que tener en cuenta que el capítulo contiene una descripción de las directivas de configuración del servidor web Apache2 mas
significativas. Por este mismo motivo muchas de ellas son objeto de un estudio práctico mas detallado en otros capítulos que estudian
aspectos mas concretos del servidor.
El alumno, por tanto, no debe sentirse desbordado por la exposición masiva de información. Estas directivas, junto con otras que se irán
introduciendo de forma paulatina, serán objeto de estudio a lo largo de los capítulos de este curso.

3 de 24
Curso Mentor Apache

Ubuntu
Nota

Como en las anteriores unidades, la primera parte es mas extensa porque incluye una serie de explicaciones acerca de la utilización de
los módulos en Apache2 que son válidas tanto para Ubuntu como para Windows.
La parte dedicada a Windows sólo contiene la parte específica y diferenciada para el tema tratado en esta unidad.

4 de 24
Curso Mentor Apache

Definición y clasificación
Definición

Un módulo en Apache2 es una forma de agrupar ciertas funcionalidades para el servidor web. 
Existe una gran cantidad de módulos disponibles desde Apache2. La lista completa está en http://modules.apache.org.
Uno 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.
Si la instalación de Apache2 arrastrase toda su posible funcionalidad la necesidad de memoria RAM y espacio en disco sería elevada y
el servicio sería 'pesado'. Sin embargo, si se modulariza sólo se incluye lo que se necesita mediante los módulos correspondientes.

Clasificación de los módulos

Existen dos tipos de módulos:

1. Los que se compilan de forma "estática" cada vez que se compila Apache2.
2. Los que se cargan dinámicamente. Esto permite que Apache2 cambie dinámicamente los módulos cada vez que se inicia, sin
necesidad de recompilar todo el programa de nuevo.
Esta opción se denomina DSO o Dynamic Shared Object (Objeto Compartido Dinámico) y los archivos correspondientes a estos
módulos tienen extensión .so.

Para que Apache2 sepa qué módulos debe cargar dispone en el directorio  /etc/apache2/ de dos directorios, en uno está lista de los


módulos disponibles (mods-available) y en el otro la lista de los módulos activados (mods-enabled).

Por defecto, la propia instalación del paquete .deb de Apache2 ya instala una serie de módulos básicos, entre ellos el que permite la
carga dinámica de módulos. Para conocer cuáles son ejecutar la orden:

# apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c

5 de 24
Curso Mentor Apache

Módulos básicos
Descripción de los módulos básicos

Incluimos una breve descripción de los módulos mas importantes y básicos de Apache2.

core.c

Contiene utilidades de Apache2 que están siempre disponibles y son requeridas en toda instalación.
Las directivas disponibles a partir de este módulo son:

AccessFileName: especifica el nombre del fichero de configuración particular de un directorio. En este directorio se pueden
incluir las directivas que queremos que se apliquen a ese directorio concreto.

AccessFileName .htaccess

AllowOverride: ya estudiada en la Unidad 2.
AuthName: establece el ámbito para autenticación HTTP.

AuthName "Mi dominio"

Otras directivas son: AuthType, DefaultType, DocumentRoot, ErrorLog


Secciones disponibles, y ya estudiadas, a partir de este módulo son:

Directory - DirectoryMatch
Files - FilesMatch
IfDefine – IfModule

http_core.c

Contiene el soporte básico http, necesario en cada instalación de Apache 2.2.

mod_access.c

Permite el control de acceso basado en el nombre de host, dirección IP u otras características de la petición del cliente. Limita el acceso
URL.
Directivas utilizables:

allow indica la parte permitida de las listas de control de acceso y determina a qué hosts se les permite acceso.
deny indica la parte bloqueada de las listas de control de acceso y determina a qué hosts no se les permite acceso.
order especifica la secuencia en la que se procesan las reglas allow y deny.

mod_dir.c

Establece la lista de nombres de archivos que se pueden utilizar si no se indica un nombre de archivo en una URL que referencia un
directorio.
El índice de un directorio puede venir dado de dos formas:

Un archivo escrito por el usuario, generalmente llamado index.html. La directiva DirectoryIndex establece el nombre de


este archivo y que es controlado por el módulo mod_dir.
O una lista generada por el servidor y que es proporcionada por el módulo mod_autoindex.

El valor por defecto de la directiva DirectoryIndex es el siguiente:

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml

Ejemplo: si se pasa la URL http://servidor/directorio/ el navegador web recibe el contenido de un archivo index.html que exista en ese
directorio.

6 de 24
Curso Mentor Apache

mod_alias.c

En general permite la redirección y la asignación de partes del sistema de archivos físico a entidades lógicas accesibles por medio del
servidor web.
Las directivas contenidas en este módulo permiten la manipulación y control de peticiones de URLs que llegan al servidor.

Alias permite mapear URLs y paths del sistema de archivos local. De esta forma contenidos que no están directamente por
debajo del valor de DocumentRoot sean servidos como parte del árbol web de documentos.
ScriptAlias además   del   efecto  anterior   determina  o  marca  el   directorio  destino  como  contenedor   sólo  de  ejecutables,
generalmente scripts CGI.
AliasMatch añade expresiones regulares.

Redirect se  utiliza  para  indicar  a  los   navegadores   que  el  documento  buscado  ha  cambiado  de  localización  (en  el  mismo
servidor o en una ubicación externa).

RedirectMatch se utiliza cuando la redirección es una URL que contiene expresiones regulares.

mod_auth_basic.c

Autenticación de usuarios a través de los métodos estándar de Apache2.
Este módulo permite la utilización de autenticación básica HTTP para restringir el acceso de usuarios a través de archivos de texto de
contraseñas y grupos.
Este módulo se estudia con detalle en la Unidad 6.

mod_auth_digest.c

Autenticación de usuarios usando autenticación MD5. Este módulo permite la utilización de autenticación digest HTTP.
Se estudia con detalle en el Capítulo 6.
Otros módulos relacionados con la autenticación son:

Módulo Descripción

mod_authn_anon
Permite a usuarios anónimos acceder a áreas que requieren autenticación.

mod_authn_dbm
Autenticación de usuario utilizando archivos DBM.

mod_authn_file
Autenticación de usuario utilizando archivos de texto.

mod_authnz_ldap
Permite que se pueda usar una base de datos LDAP para almacenar las credenciales en la
autenticación básica HTTP.

mod_authz_*
Permiten  o  deniegan  el  acceso  (autorización)  a  los   recursos   basándose  en  el  acceso  de
usuarios autenticados.

mod_authz_host
Autorización basada en la IP o nombre del equipo cliente.

mod_log_config.c

Registro flexible de las peticiones del cliente hechas al servidor.
Los registros se escriben en un formato personalizable, y se pueden escribir directamente a un archivo, o a un programa externo.
Este módulo se estudia en la Unidad 8.

7 de 24
Curso Mentor Apache

worker.c

Módulo de MultiProcesamiento (MPM) que implementa un servidor híbrido multiproceso-multihebra.
Usando hebras para atender peticiones el servidor puede servir un mayor número de peticiones con menos recursos de sistema que un
servidor basado únicamente en procesos (http://httpd.apache.org/docs/2.2/mod/).

mod_mime.c

Determina el tipo de archivo por su nombre.
Asocia varios bits de meta-información con archivos a través de su extensión de nombre de archivo.
La  meta-información  incluye  su  tipo  MIME,   idioma,   juego  de  caracteres   y   codificación.   Esta  información  se  envía  al  navegador,   y
participa en la negociación del contenido, y las preferencias del usuario se respetan al elegir uno de los posibles archivos a servir.

mod_status.c

Muestra información interna acerca de la actividad y funcionamiento del servidor.
La estadística actual del servidor se presenta de una forma fácilmente legible mediante una página HTML. Si la página es requerida se
puede hacer un refresco automático. Otra página proporciona una lista legible por la máquina simple del estado actual del servidor.

mod_autoindex.c

Permite visualizar el listado de directorios generado por el servidor.
Actúa de forma similar al comando ls de GNU/Linux. Esta generación automática se activa utilizando la directiva Options de la forma:

Options +Indexes

mod_negotiation.c

Proporciona la visualización condicional de documentos basándose en los campos Content-Encoding, Content-Language, Content-Length
y Content-Type de las cabeceras HTTP.

mod_so.c

Carga y ejecuta módulos DSO.
Contiene las directivas necesarias para poner en marcha objetos dinámicos compartidos.

Nota: La información de este punto ha sido parcialmente extraída de la página oficial http://httpd.apache.org/.

8 de 24
Curso Mentor Apache

Activación / Instalación
Órdenes a2enmod / a2dismod

Para activar un módulo de Apache2 disponible en el directorio /etc/apache2/mods-available/ es suficiente ejecutar como root


(o un usuario sudo) la orden a2enmod sobre él.

Por ejemplo, se quiere activar el módulo userdir. Para ello:

1. Comprobamos que está disponible en /etc/apache2/mods-available/:

# ls /etc/apache2/mods-available/

authz_dbm.load dav_lock.load imagemap.load proxy_http.load

authz_default.load dbd.load include.load proxy.load

authz_groupfile.load deflate.conf info.load rewrite.load

authz_host.load deflate.load ldap.load setenvif.load

authz_owner.load dir.conf log_forensic.load sick-hack-to-update-


modules

authz_user.load dir.load mem_cache.conf speling.load

autoindex.load disk_cache.conf mem_cache.load ssl.conf

cache.load disk_cache.load mime.load ssl.load

cern_meta.load dump_io.load mime_magic.conf status.load

cgid.conf env.load mime_magic.load suexec.load

cgid.load expires.load negotiation.load unique_id.load

cgi.load ext_filter.load proxy_ajp.load userdir.conf

charset_lite.load file_cache.load proxy_balancer.load userdir.load

dav_fs.conf filter.load proxy.conf usertrack.load

dav_fs.load headers.load proxy_connect.load version.load

dav.load ident.load proxy_ftp.load vhost_alias.load

2. Activamos el módulo y relanzamos el servicio apache2:

#a2enmod userdir
Enabling module userdir.
Run '/etc/init.d/apache2 restart' to activate new configuration!
#/etc/init.d/apache2 restart

3. Esta orden crea dos enlaces simbólicos en el directorio  /etc/apache2/mods-enabled/ hacia los archivos correspondientes


en /etc/apache2/mods-available/. Lo comprobamos:

# ls -al /etc/apache2/mods-enabled
lrwxrwxrwx 1 root root 30 2011-05-26 19:09 userdir.conf -> ../mods-available
/userdir.conf
lrwxrwxrwx 1 root root 30 2011-05-26 19:09 userdir.load -> ../mods-available
/userdir.load

9 de 24
Curso Mentor Apache

userdir.conf contiene la configuración por defecto de dicho módulo
userdir.load contiene la línea correspondiente a la carga (LoadModule) de dicho módulo indicando el path (/usr/lib
/apache2/modules/mod_userdir.so) donde se encuentran los módulos compilados y preparados para la carga dinámica
(.so).

Instalación manual de módulos

apxs2 (APache eXtenSion tool) es una herramienta muy importante para los desarrolladores de módulos.
apxs2

Permite compilar e instalar mediante un sólo comando los módulos disponibles a partir del fuente (extensión .c).
Permite la instalación de módulos disponibles en forma de archivos de objetos (extensión .o) o librerías estáticas (extensión .a).

A   partir  de  las  fuentes,   apxs2  crea  un  “objeto  dinámico  compartido”  (DSO)  que  puede  ser  utilizado  directamente  como  módulo  por
Apache2.
La utilización de la orden apxs2 requiere la instalación del paquete Debian apache2-threaded-dev.

# apt-get install apache2-threaded-dev
También requiere que esté disponible el módulo mod_so (se ha comprobado que por defecto viene incorporado).
La orden siguiente permite instalar un módulo a partir del código fuente:

# apxs2 -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
 ld -Bshareable -o mod_foo.so mod_foo.o
# apxs2 -i -a mod_foo.c
  cp mod_foo.so /path/to/apache/modules/mod_foo.so
  chmod 755 /path/to/apache/modules/mod_foo.so
  [activating module `foo' in /path/to/apache/etc/httpd.conf]
-c indica que se compila el fuente mod_foo.c
-i indica que se instala uno o más objetos compartidos (DSO)
La primera orden compila © y la segunda instala (i) y activa (a) el módulo.
Otras opciones disponibles:
-o permite indicar el nombre que se le asigna al objeto DSO (.so). Si no se incluye se toma como nombre el mismo que el fuente. En el
ejemplo sería: mod_foo.so.
-a automáticamente activa el módulo y añade la línea LoadModule correspondiente en el archivo de configuración apache2.conf

10 de 24
Curso Mentor Apache

Módulo mod_userdir
Definición

Uno de los módulos más conocidos y que acabamos de activar es mod_userdir.
mod_userdir permite 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. 

Directivas asociadas a mod_userdir

Las directivas disponibles para este módulo son:

UserDir 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.

UserDir public_html

También permite indicar usuarios que pueden disponer de este espacio web:

UserDir enable usuario1 usuario2 ... usuarioN

La directiva anterior permite a estos usuarios tener directorio de inicio accesible vía web.

UserDir disable usuario1 usuario2 ... usuarioN

La directiva anterior deshabilita a estos usuarios para tener directorio de inicio accesible vía web.

usuario1, usuario2,... son usuarios que tienen login en el sistema. Si están activos podemos poner el carácter '~' en los caminos de las
URLs. Por ejemplo, si escribimos:

http://servidor.apache2.com/~usuario1
se accede al home del usuario 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.

alias /usuario1/ /home/usuario1/public_html/

El archivo de configuración por defecto para este módulo /etc/apache2/mods-available/userdir.conf, contiene:

<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>
</IfModule>

Esta configuración indica que el directorio donde estarán los archivos html de los usuarios es public_html (podemos cambiar


el nombre).
El usuario root está desactivado (por seguridad). Si no estuviese desactivado accediendo a  servidor.apache2.com/~root

11 de 24
Curso Mentor Apache

se podría llegar al directorio root.
La  sección <Directory> está  indicando  que  los home  de  todos los usuarios podrán  ser listados sus contenidos
(Options Indexes). Es decir, cualquier usuario cuyo home contenga el directorio public_html podrá publicar su
contenido en el servidor Apache2 correspondiente.

12 de 24
Curso Mentor Apache

Otros módulos de Apache2


Descripción

Otros módulos importantes para Apache2 (algunos de ellos nuevos) son los siguientes y que se irán estudiando a medida que se vayan
necesitando:

mod_ssl

Módulo nuevo desde Apache 2.0.
Este módulo es una interfaz para los protocolos de encriptado SSL/TLS de OpenSSL.
Se verá con detalle en la Unidad 6.

mod_dav

Módulo nuevo desde Apache 2.0.
Este módulo implementa la especificación del HTTP  Distributed Authoring and Versioning (DAV) para colgar y mantener contenidos
web.
Se verá con detalle en la Unidad 8.

mod_deflate

Módulo nuevo desde Apache 2.0.
Este módulo permite soportar navegadores que requieren que el contenido sea comprimido (algoritmo deflate) antes de ser servido al
cliente, ahorrando ancho de banda.

mod_headers

Este módulo permite la personalización de las peticiones HTTP y las cabeceras de las respuestas.

mod_proxy

Implementa un proxy caché para Apache2.
El módulo proxy cumple los requerimientos de la especificación HTTTP/1.1.
Además,   se  han  incorporado  nuevas  secciones  de  configuración  a  la  directiva  <Proxy>  que  hacen  mas  fácil  (e  internamente  más
rápido) el control de los sitios web que usan proxys. El módulo está ahora dividido en módulos específicos para cada protocolo, incluidos
proxy_connect, proxy_ftp y proxy_http.
Se verá con detalle en la Unidad 9.

mod_include

Permite inclusiones del lado del servidor.
Aplica  SSI   (Server  Side  Includes)  que,   como  ya  se  ha  indicado,   son  documentos   HTML  que  incluyen  instrucciones   condicionales
analizadas por el servidor antes de ser enviados al cliente.

13 de 24
Curso Mentor Apache

Archivos .htaccess
Definición

Los  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.
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).
Si se quiere deshabilitar completamente la utilización de estos archivos hay que incluir la directiva:

AllowOverride None

Directivas en .htaccess

Directivas relacionadas:

AccessFileName

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:

AccessFileName .htaccess

AllowOverride

AllowOverride controla el comportamiento del archivo .htaccess. Se utiliza dentro de secciones <Directory>.

AllowOverride All | None | Tipo_de _Directiva
donde:

None: los archivos .htaccess son totalmente ignorados
All: la configuración del archivo .htaccess sobreescribe la configuración de apache2.conf para ese directorio concreto.
Tipo_de_Directiva puede ser:
AuthConfig directivas de autenticación
FileInfo control del tipo de documentos (mod_mime)
Indexes controla la visualización de un directorio
Limits permite directivas de control de acceso
Options controla los servicios de un directorio

En concreto, escribir:

AllowOverride AuthConfig FileInfo Indexes Limits Options
AllowOverride All
es totalmente equivalente.
En general, si vamos a la web oficial http://httpd.apache.org/docs/2.2/en/mod/quickreference.html aquellas directivas que tengan una 'h'
en la penúltima columna están disponibles para el archivo .htaccess.

14 de 24
Curso Mentor Apache

Utilización de archivos .htaccess

Los motivos fundamentales para no permitir (o no recomendar) la utilización de archivos .htaccess son los siguientes:

1. El primero es de funcionamiento.
Cuando se activa AllowOverride para permitir el uso de archivos .htaccess, Apache2 mirará en cada directorio buscando
estos archivos. De esta forma entran en funcionamiento tanto si se utilizan como sino. Además el archivo .htaccess se carga
cada vez que se solicita un documento.
Además Apache2 buscará archivos .htaccess en todos los directorios de niveles superiores, para tener el conjunto
completo  de  directivas que  debe  aplicar. Así, si un  archivo  se  solicita  fuera  de  un  directorio /var/www/ejemplo,
Apache2 debe buscar los archivos siguientes:

/.htaccess
/var/.htaccess
/var/www/.htaccess
/var/www/ejemplo/.htaccess
Entonces,   para  cada  acceso  a  un  archivo  fuera de ese directorio, hay 4  accesos adicionales al sistema de archivos, incluso
aunque ninguno de esos archivos estuviera presente. Esto ocurriría sólo en el caso de que los archivos .htaccess estuvieran
permitidos en /, que no deberá ser el caso.
2. La segunda consideración es de seguridad.
Se  está  permitiendo  que  los  usuarios  modifiquen  la  configuración  del  servidor  y  pueden  ser  cambios  de  los  que  no  se  tiene
control. Hay que documentar exactamente qué se ha establecido en AllowOverride para conocer exactamente qué nivel de
privilegios se ha dado a los usuarios.

Es   importante   saber   que   es   completamente   equivalente   poner   un   archivo   .htaccess   en   el   directorio /var/www/ejemplo/
conteniendo una directiva, a poner la misma directiva en una sección <Directory> en la configuración del sitio principal del servidor.
Archivo .htaccess en /var/www/ejemplo cuyo contenido es:

AddType text/ejemplo .eje

Tiene idéntico efecto que en /etc/apache2/sites-available/default añadir:

<Directory /var/www/ejemplo>
AddType text/ejemplo .eje
</Directory>

Con la diferencia que este archivo se carga cuando Apache2 arranca y sin embargo al archivo .htaccess se accede cada vez que se
solicita un archivo.

15 de 24
Curso Mentor Apache

Windows
A tener en cuenta ...

El concepto y sentido de los módulos en Windows es idéntico que en Ubuntu.
Existe alguna diferencia en cuanto a cuáles de ellos vienen incluidos de serie en los respectivos paquetes instalables. Por ejemplo, en
general las versiones de Apache2 para GNU/Linux incluyen el módulo mod_ssl que garantiza las comunicaciones seguras, sin embargo
en Windows se ha de descargar el archivo .msi especial que lleva soporte SSL.

16 de 24
Curso Mentor Apache

Módulos de Apache2
Módulos en Apache2 con Windows

Los   módulos   instalados   por   defecto   están   disponibles   en   el   directorio   C:\Program  Files\Apache  Software  Foundation\Apache2.2
\modules.
La filosofía de activación/desactivación de módulos en Windows se mantiene con respecto a la versión de Apache 1.3. Es decir,  para
activar un módulo se añade (o descomenta) la línea LoadModule correspondiente en el archivo httpd.conf.
Por ejemplo:

LoadModule alias_module modules/mod_alias.so

que activa el módulo mod_alias.
No existe, por tanto, ninguna herramienta a2enmod/a2dismod para activar/desactivar los módulos, ni existen tampoco los directorios
mods_available y mods_enabled. La activación es en tiempo de ejecución.
Por   ejemplo,   una   sección   típica   de   carga   de   módulos   del   archivo   C:\Archivos   de   programa\Apache   Software
Foundation\Apache2.2\conf\httpd.conf, para una instalación por defecto de Apache2, tendría el siguiente aspecto:

LoadModule actions_module modules/mod_actions.so

LoadModule alias_module modules/mod_alias.so

LoadModule asis_module modules/mod_asis.so

LoadModule auth_basic_module modules/mod_auth_basic.so

.......................................................

En el archivo existen otras líneas LoadModule comentadas. Si se quiere activar el módulo correspondiente basta con descomentar
dicha línea.

Los comportamientos específicos para cada módulo se pueden incluir en la sección <IfModule> en el propio archivo httpd.conf o
en archivos dedicados para cada módulo que, con un Include, se añaden a httpd.conf.
Por ejemplo, el módulo mod_dir.so tiene sus directivas en una sección <IfModule> dentro del propio httpd.conf:

<IfModule dir_module>
DirectoryIndex index.html
</IfModule

El modulo mod_userdir.so sin   embargo,   dispone   de   un   archivo   específico   en conf/extra   llamado   httpd-
userdir.conf que incluye toda la configuración específica para dicho módulo:

# Settings for user home directories

# Required module: mod_userdir

# UserDir: The name of the directory that is appended onto a user's home

......................................................................

UserDir "My Documents/My Website"

# Control access to UserDir directories. The following is an example

17 de 24
Curso Mentor Apache

# for a site where these directories are restricted to read-only.

<Directory "C:/Users/*/My Documents/My Website">

AllowOverride FileInfo AuthConfig Limit Indexes

Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

<Limit GET POST OPTIONS>

Order allow,deny

Allow from all

</Limit>

<LimitExcept GET POST OPTIONS>

Order deny,allow

Deny from all

</LimitExcept>

</Directory>

Podemos hacer sobre él las modificaciones necesarias y utilizar un Include en httpd.conf para incorporarlas a la configuración


global de Apache2.

Include conf/extra/httpd-userdir.conf

Y comprobar que está descomentada la línea:

LoadModule userdir_module modules/mod_userdir.so

18 de 24
Curso Mentor Apache

Archivos .htaccess
Utilización en Windows

Como ya definimos, .htaccess es un archivo oculto en un directorio del servidor que permite incluir directivas de configuración del
servidor web Apache2.
Normalmente es utilizado por los usuarios para personalizar el comportamiento del servidor Apache2 cuando accedan a sus espacios
web.   Así,   cuando  se  realiza  una  petición  al  servidor  este  busca  el  archivo  en  el  directorio  solicitado  y   si  existe  da  prioridad  a  las
directivas incluidas en él.
Para crear un archivo .htaccess abrir el Bloc de notas, escribir las directivas y guardarlo con el nombre
“.htaccess” . Hay que incluir las comillas para que no se guarde con la extensión txt.
Como el archivo ha sido creado por un usuario para personalizar el acceso a su web, si este usuario:

existe en el sistema: lo copia en el directorio al que afecta.

no existe en el sistema: subirá el archivo al servidor (vía FTP)

A partir de ahora, cada vez que el navegador acceda al directorio el servidor lo leerá y ejecutará.
Para que el servidor haga caso de los archivos .htaccess hay que incluir la directiva AllowOverride (permite sobreescritura).

Si se quiere deshabilitar completamente la utilización de estos archivos hay que incluir la directiva:

AllowOverride None

Por defecto viene la opción desactivada.
En el caso de que se permita su utilización, las directivas relacionadas son:

AccessFileName que permite modificar el nombre del archivo por defecto. Se incluye en el archivo de
configuración httpd.conf:

AccessFileName .htaccess

AllowOverride que controla el comportamiento del archivo .htaccess. Se incluye en la sección <Directory>.

AllowOverride All | None | Tipo_de _Directiva

19 de 24
Curso Mentor Apache

Glosario
Glosario Unidad 4

Concepto Definición
Identificación positiva de una entidad de red tal como un servidor, un cliente, o un usuario.
Autenticación

Definición estándar para un interfaz entre un servidor web y un programa externo que permite hacer peticiones de
CGI
servicio a los programas externos.

Protocolo creado por Netscape Communications Corporation para la autenticación en comunicaciones en general
Encriptado SSL/TSL
y   encriptado  sobre  redes   TCP/IP.   Su  aplicación  más   popular  es   HTTPS,   el  Protocolo  de  Transferencia  de
Hipertexto (HTTP) sobre SSL. TSL es la evolución de SSL.

Los hilos o hebras son similares a los procesos en que ambos representan una secuencia simple de instrucciones
Hebras
ejecutada en paralelo con otras secuencias. Los hilos son una forma de dividir un programa en dos o más tareas
que corren simultáneamente.

Se trata de servir diferentes sitios web con una sola entidad de Apache. El hosting virtual de IPs diferencia los
Host Virtual
sitios   web  basándose  en  sus   direcciones   IP,   mientras   que  el  hosting  virtual  basado  en  nombres   usa  solo  el
nombre del host y de esta manera puede alojar muchos sitios web con la misma dirección IP.

LDAP   (Lighweight   Directory   Access   Protocol)  es   un  servicio  de  directorio  ordenado  y   distribuido  para  buscar
LDAP
diversa información en un entorno de red. LDAP puede considerarse una base de datos (aunque su sistema de
almacenamiento puede ser otro diferente) al que pueden realizarse consultas.

Parte independiente de un programa. La mayor parte de la funcionalidad de Apache está contenida en módulos
Módulo
que pueden incluirse o excluirse. Los módulos que se compilan con el binario httpd de Apache se llaman módulos
estáticos, mientras que los que se almacenan de forma separada y pueden ser cargados de forma opcional, se
llaman módulos dinámicos o DSOs. Los módulos que están incluidos por defecto de llaman módulos base. Otros
módulos disponibles para Apache no se distribuyen por defecto y son llamados módulos de terceros.

Un  recurso  puede  estar  disponible  en  varias  representaciones.   Por  ejemplo,   puede  ser  que  esté  disponible  en
Negociación   de
varios idiomas o varios tipos de medios, o una combinación. Una forma de seleccionar la opción más apropiada
Contenido
es   dar   al   usuario   una   página   del   índice,   dejarle   seleccionar.   Sin   embargo   es   posible   que   el   servidor   elija
automáticamente.   Esto  es   posible  porque  los   navegadores   pueden  enviar  sus   preferencias   como  parte  de  la
petición. Por ejemplo, un navegador puede indicar que prefiere la información en francés.

SSI Server  Side   Includes:   comentarios  especiales  incluidos  en   el  html  que   al  leerlos  el  servidor  ejecuta
acciones como incluir trozos de html, ejecutar un programa cgi, fecha, hora,...

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

20 de 24
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Introducción a los servidores web: http://www.cibernetia.com/
3. Conceptos sobre servidores web: http://trevinca.ei.uvigo.es/
4. Módulos de Apache en Ubuntu: http://www.socinfo.com/ubuntu/apache/modulos/activar-e-instalar
5. Módulos de Apache en Windows: http://www.apachelounge.com/

21 de 24
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 4 'Módulos en Apache2'

Los puntos a destacar de esta unidad son los siguientes:

1. Ubuntu y Windows comparten la utilización de los módulos de Apache, pero no los mecanismos de instalación y/o activación.
2. Ubuntu estructura los módulos en directorios diferenciados: modulos disponibles y modulos activados.
3. Dispone de órdenes específicas para realizar la activación/desactivación de los módulos.
4. Los 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.
5. Es importante por seguridad mantener un control estricto sobre la utilización de los archivos .htaccess.
6. Desde Windows la estructura de Apach2 sigue la de la versión 1.3.
7. En el archivo httpd.conf están las líneas de carga de los diferentes módulos y que hay que descomentar para que se activen.
8. Aquellos módulos que requieran una configuración específica o personalizada se pueden generar archivos de configuración que se
añadiran a httpd.conf mediante Includes.

22 de 24
Curso Mentor Apache

Autoevaluación Unidad 4
Autoevaluación

El cuestionario de autoevaluación de la Unidad 4 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

23 de 24
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 4

24 de 24
Curso Mentor Apache

Apache
Unidad 5: Hosts virtuales

 
En este capítulo aprenderás:
el concepto de host virtual.
los tipos de hosts virtuales que puede manejar Apache2 y su fundamento.
Los directorios y archivos implicados en su configuración.
Las órdenes relativas a su manipulación.
cómo se definen los hosts virtuales de Apache2, su activación y desactivación.
la utilización básica de los hosts virtuales de Apache2.

Material complementario:

1. Archivo con las actividades de la unidad. Archivo  U5_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U5_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf

1 de 29
Curso Mentor Apache

Introducción
Objetivos

Conocer el concepto y funcionalidad de los hosts virtuales en Apache2.

Conocer los tipos de hosts virtuales.

Conocer y trabajar con las directivas de configuración directamente


implicadas.

Realizar la configuración y puesta a punto de hosts virtuales.

Conocimientos previos

En  esta  unidad  abordamos   la  configuración  y   utilización  de  los   hosts   virtuales   e  Apache2  .   Es   importante  tener  claros   los
mecanismos de configuración de Apache en ambos sistemas operativos Ubuntu y Windows y las diferencias entre ambos.

Contenidos

Unidad 5: Hosts virtuales
A. Ubuntu

1. Definición de host virtual y tipos


2. Directivas relacionadas
3. Host virtual basado en nombres
4. Host virtual basado en IP

B. Windows

1. Diferencias con Ubuntu


2. Host virtual basado en nombres
3. Host virtual basado en IP

C. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 29
Curso Mentor Apache

Ubuntu:

3 de 29
Curso Mentor Apache

Definicion de host virtual y tipos


Definición de Host virtual

Trabajar con Hosts Virtuales consiste en ejecutar más de un sitio web en el mismo servidor.
Mediante los hosts virtuales Apache2 nos 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:

1. Ventajas

Versatilidad: crea diferentes sitios web configurables
Precio: se necesita sólo una máquina para alojar varios servidores web
Configuración : una configuración del sistema sirve para todos los servidores web
Actualizaciones : sólo una vez
Requerimientos: no requiere ningún software ni hardware adicional.

2. Desventajas

Fragilidad: si cae el sistema todos los sitios web caerán
Configuración : si la configuración no es correcta no funcionará ninguno de ellos
Actualizaciones : si requiere detener el sistema pararan todos los servidores web
Seguridad : cualquier problema de seguridad afectará a todos

Actividad 5.1

Enunciado:
Supongamos   que   queremos   alojar   dos   sitios   web   servidor1.dominio.com   y   servidor2.dominio.com   en   la   misma   máquina,
respondiendo ambos a una sóla IP y con una sóla instancia de Apache2 configurada y que responde las peticiones por el puerto
80.
Solución:
Usando hosts virtuales podemos conseguir que, en el caso de que sea invocado servidor1.dominio.com, Apache2 vaya a leer los
archivos en el directorio que hayamos configurado como DocumentRoot, y los mande al navegador de quien lo haya pedido, y
en  el  caso  que  sea  convocado  como  servidor2.dominio.com,   vaya  a  leer  los   archivos   a  otro  directorio.   Es   decir,   habrá  un
directorio (DocumentRoot) para cada uno de los servidores virtuales que definamos.

Tipos de hosts virtuales

Apache soporta dos tipos de hosts virtuales:

1. Hosts  virtuales  basados  en   nombres:   permiten  alojar  varios   nombres   de  host   (o  dominios)  en  una  misma

4 de 29
Curso Mentor Apache

máquina  (IP).   Todos   los   hosts   virtuales   que  comparten  la  misma  IP   deben  declararse  mediante  la  directiva
NameVirtualHost.
Símil: supongamos un hogar familiar con un teléfono fijo (IP) que comparten todos sus miembros. Al llamar por
teléfono se pregunta por una persona (nombre) u otra que atenderá la llamada.
2. Hosts virtuales basados en IP: una máquina responde de diferente manera a diferentes direcciones IP. Es decir,
tenemos múltiples IPs asignadas al sistema y queremos que cada una de ellas soporte un sitio web.
Símil:  una  persona  tiene  dos  teléfonos,   el  del  trabajo  y  el  particular.   En  función  a  qué  teléfono  se  le  llame  la
respuesta de la misma persona podrá ser diferente.
También podría darse la situación de disponer de varias IPs en el sistema y querer que cada una de ellas soporte varios
sitios web. Se trata de una situación mixta: por nombre y por IP.
En general, el caso más usual es el primero (que una sola máquina responda a varios nombres) y es el que vamos a
analizar.

5 de 29
Curso Mentor Apache

Directivas relacionadas
Consideraciones

1. El host virtual heredará los parámetros del host principal que no se cambien para él de forma explícita.
2. 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.
3. Como mínimo deben incluir las directivas DocumentRoot y ServerName.

Directivas

Directiva Descripción

DocumentRoot Directorio donde Apache2 va a buscar los documentos el servidor virtual.
NameVirtualHost Define la dirección IP (y opcionalmente, el puerto) donde va a escuchar el servidor virtual.
ServerName Define el nombre del servidor virtual en formato DNS.
ServerAlias Define mas nombres de servidor virtuales para ese servidor.
VirtualHost Define una sección para un host virtual con las directivas aplicables a él.

6 de 29
Curso Mentor Apache

Host virtual basado en nombre


Definición

Para usar hosts virtuales basados en nombre se debe especificar en el servidor qué dirección IP se va a usar para atender las
peticiones de los diferentes hosts mediante la directiva NameVirtualHost.
Normalmente puede usarse cualquiera o todas las direcciones IP del servidor.
Para la directiva NameVirtualHost utilizaremos:

NameVirtualHost *
donde el '*' indica que los servidores especificados aceptan 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 problema viene cuando el navegador es muy antiguo y utiliza el protocolo HTTP/1.0. En este caso Apache2 servirá siempre la
página del host por defecto.
El siguiente paso es crear un bloque <VirtualHost> para cada host diferente que se quiera alojar en el servidor. El
argumento de la directiva <VirtualHost> debe ser el mismo que el argumento de la directiva NameVirtualHost.

<VirtualHost * >

Si se va a usar más de un puerto (por ejemplo si va a usar SSL) se debe añadir un puerto a cada argumento, por ejemplo:

<VirtualHost *:80 >

Dentro de cada bloque <VirtualHost>, necesitará como mínimo una directiva ServerName para indicar qué host se sirve y
una directiva DocumentRoot para indicar dónde están los contenidos a servir dentro del sistema de archivos.
En Ubuntu al instalar Apache siempre existe un host virtual definido cuyo archivo de configuración se llama default y está en
el directorio  /etc/apache2/sites-available/.

Importante

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   necesario  entonces   que,   si  se  dispone  de  un  servidor  'oficial'   con  varios   hosts   virtuales,   este  servidor  'oficial'   también
aparezca como <VirtualHost> y esté en primer lugar.

7 de 29
Curso Mentor Apache

Actividades
Actividad 5.2

Enunciado:
Añadir un host virtual a un servidor web ya existente como un sitio diferente a default.
Solución:
El servidor web existente (host virtual por defecto) dispone de su configuración como host virtual en el archivo
Supongamos   que   ya   se   está   sirviendo   el   dominio   servidor.apache2.com   y   se   quiere   añadir   el   host   virtual
virtual.apache2.com, que apunta a la misma dirección IP.
Para preparar el nuevo sitio virtual, correspondiente al dominio virtual.apache2.com

Editar el archivo/etc/hosts y añadir la línea:


192.168.0.1   virtual.apache2.com    virtual
Crear el directorio/var/www/virtual
Crear un archivo llamado index.html con el contenido: “Servidor virtual virtual.apache2.com"
Copiar   el   archivo    /etc/apache2/sites-available/default con  el   nombre  de  virtual   y   comprobar   los
cambios en las líneas que se indican. Eliminar el resto para simplificar.
Este archivo es el que contiene la configuración para el nuevo sitio virtual.

<VirtualHost *>
ServerName virtual.apache2.com
DocumentRoot /var/www/virtual
<Directory /var/www/virtual>
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>

Activar el sitio ejecutando la orden:

#a2ensite virtual

Reiniciar el servidor para que lea los cambios realizados en el archivo de configuración.

#/etc/init.d/apache2 reload

Ir al navegador y probar la URL virtual.apache2.com. Comprobar que se visualiza el contenido de index.html
para ese sitio virtual.

Pero ¿qué ocurre si ahora vamos a la URL servidor.apache2.com?
Es posible (no tiene porque ser así) que visualizemos el mismo archivo index.html que en el dominio virtual.
Esto quiere decir que hemos de modificar la configuración del sitio por defecto de Apache servidor.apache2.com.
Solución:

1. Editar el archivo /etc/hosts y comprobar que se tiene la línea:

192.168.0.1 servidor.apache2.com servidor
2. Editar  el  archivo  de  configuración  del  sitio  /etc/apache2/sites−available/default   y   comprobar  las   líneas
indicadas, dejando el resto como están:

NameVirtualHost *
<VirtualHost *>

8 de 29
Curso Mentor Apache

ServerName servidor.apache2.com
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride none
Order allow,deny
Allow from all
RedirectMatch ^/$ /apache2-default/
  </Directory>
</VirtualHost>

3. Reiniciar el servidor para que lea los cambios realizados en el archivo de configuración.

#/etc/init.d/apache2 reload

4. Ir  al  navegador  y  probar  la   URL http://servidor.apache2.com y  comprobar  que   se   visualiza   de   nuevo   la
página de inicio de Apache2.
5. Ejecutar la siguiente orden para comprobar los hosts virtuales configurados:

#apache2 -S

Explicación de la configuración dada:
Con la directiva NameVirtualHost * se le está diciendo a Apache2 que se activan los hosts virtuales por nombre para la IP
dada en ServerName (externo).
Los siguientes grupos <VirtualHost *>...</VirtualHost> definen los hosts virtuales de nuestro servidor. En cada uno de
estos bloques, se le indica a Apache2 el DocumentRoot del host especificado en ServerName.
El primer host virtual de la lista es el que se usa por defecto.
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.

Actividad 5.3

Enunciado:
¿Qué hay que hacer para poder acceder a uno de los sitios web usando nombres diferentes?
Solución:
Para ello se utiliza la directiva ServerAlias (indica la lista de nombres que pueden usarse para acceder a un mismo sitio web),
puesta dentro de la sección <VirtualHost>.
En el caso de utilizar el sitio por defecto se podría escribir en /etc/apache2/sites−available/default:

ServerAlias *.apache2.com

entonces   las   peticiones   para   todos   los   hosts   en   el   dominio   apache2.com   serán   servidas   por   el   host   virtual
servidor.apache2.com.
Los caracteres comodines '*' y '?' permiten encontrar equivalencias con los nombres. Pero no podemos inventar nombres y

9 de 29
Curso Mentor Apache

ponerlos   en  la  directiva  ServerName o ServerAlias. Antes   hay   que  establecer  la  relación  IP-Nombre  bien  mediante  el
archivo /etc/hosts o mediante DNS.
Si   se   abre   el   navegador   se   comprobará   que   ahora   se   accede   a   la   página   inicial   de   Apache2   tanto   desde
servidor.apache2.com como desde virtual.apache2.com.
Pero esto no interesa, así que se deja como estaba y se elimina el ServerAlias.

Actividad 5.4

Enunciado:
Host virtual basado en nombres (adecuar para DNS).
Solución:
Si en aula dispone de servicio DNS se puede dejar de utilizar el archivo /etc/hosts y trabajar con DNS.
1.   El   primer   paso   consiste   en   configurar   los   servicios   DNS   para   que   ambos   dominios   (servidor.apache2.com –
virtual.apache2.com)   apunten  a  la  misma  dirección  IP 1 .   Esto  se  hace  mediante  el  tipo  de  registro  CNAME   (nombre
canónico).
En el archivo /etc/bind/db.apache2.com escribir:

$TTL 10800
apache2.com. IN SOA servidor.apache2.com.
(1 ;
10800 ; 3 horas
900 ; 15 minutos
604800 ; 1 semana
86400) ; 1 día
apache2.com. IN A 192.168.0.1
apache2.com. IN NS servidor.apache2.com.
; SERVIDORES
servidor IN A 192.168.0.1
virtual IN CNAME servidor
; ESTACIONES DEL AULA
pc02 IN A 192.168.1.2

De esta forma se le está diciendo al servidor de DNS que el nombre virtual es un alias de servidor. Y así los clientes ya
podrán obtener la dirección IP de virtual.apache2.com.
2. Editar el archivo /etc/bind/named.conf.local y dejar las líneas siguientes:

zone "apache2.com" { type master;
allow-query { 127.0.0.1; 192.168.0.1/24; };
allow-transfer { 127.0.0.1; 192.168.0.1/24; };
file "/etc/bind/db.apache2.com"; };
zone "1.168.192.in-addr.arpa" { type master;
allow-query { 192.168.0.1/24; };
allow-transfer { 192.168.0.1/24; };
file "/etc/bind/db.192.168.0"; };

allow-query deja activas sólo las consultas internas y a la máquina local.

allow-transfer restringe las transferencias de zona.

10 de 29
Curso Mentor Apache

3. Editar el archivo /etc/bind/db.192.168.0 y dejar las líneas siguientes:

$TTL 10800
@ IN SOA apache2.com. ( 1 ;
10800 ;
900 ;
604800 ;
86400 ; )
@ IN NS servidor.apache.com.
1 IN PTR servidor.apache2.com.
1 IN PTR virtual.apache2.com.
10 IN PTR pc02.apache2.com.

4. Configuración: los archivos de configuración no se ven afectados en este caso. Sólo afecta a la resolución de nombres.
5. Para comprobar los dominios virtuales:

# apache2 -S

6.Reiniciar el demonio named.

# /etc/init.d/bind9 restart

11 de 29
Curso Mentor Apache

Host virtual basado en IP


Definición

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.
Adaptar las IPs a los valores reales en el aula.

<VirtualHost 192.168.0.1>
ServerName servidorA.apache2.com
DocumentRoot /var/www/servidorA
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB.apache2.com
DocumentRoot /var/www/servidorB
</VirtualHost>

En este caso los servidores virtuales definidos reciben las solicitudes en función de la IP requerida, no del nombre del servidor.
Como no se dispone de equipos con varias interfaces de red se puede probar con las IPs que asigna VMware (hay que tener
ejecutándose VMware-Workstation) o creando alias de la tarjeta disponible (no es muy conveniente trabajar de esta forma).
Es posible también asociar la IP a un puerto concreto 80, 443, etc.

Para poder probar esta práctica hay que editar el archivo /etc/network/interfaces y añadir la porción de código siguiente


adecuando los datos al aula:

auto eth0:0
iface eth0:0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.100

Se está creando un alias de la tarjeta ethernet eth0 y se le asigna la IP 192.168.0.2.
Crear ahora los directorios adecuados e incluir en ellos algún archivo html para hacer la prueba.

12 de 29
Curso Mentor Apache

Actividades
Actividad 5.5

Enunciado:
Definir hosts virtuales basados en IP
Solución:
El ejemplo muestra cómo se debe configurar Apache2 para que, además de la dirección IP original 192.168.0.1, permita trabajar
con dos dominios mas utilizando otras dos direcciones IP 192.168.0.2 y 192.168.0.3.
Se supone que la puerta de enlace es 192.168.0.100 y el dominio inicial asociado a la IP 192.168.0.1 es servidor.apache2.com.
Para la implementación se utilizarán los alias de las tarjetas ethernet.
Siguiendo el esquema del punto anterior definir en /etc/network/interfaces dos alias de la tarjeta real eth0, que serán
eth0:0 y eth0:1 con los datos siguientes:

auto eth0:0
iface eth0:0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.100
 
auto eth0:1
iface eth0:0 inet static
address 192.168.0.3
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.100

Una vez están definidos los alias hay que reiniciar la red y comprobar que ya están disponibles:

#/etc/init.d/networking restart
#ifconfig

A   partir  de  este  momento  el  sistema  ya  dispone  de  3  interfaces  de  red,   una  real  y  dos  alias  que  permiten  definir  dos  host
virtuales alojados en el mismo servidor web, además del dominio inicial servidor.apache2.com.
La configuración  para  los hosts virtuales virtualA.apache2.com y virtualB.apache2.com es la  siguiente  y podría ser
incluida tanto en el archivo default como en archivos diferenciados dentro de sites-available:

<VirtualHost 192.168.0.2>
ServerName virtualA.apache2.com
DocumentRoot /var/www/virtualA
ErrorLog /var/log/apache2/virtualA-error.log
CustomLog /var/log/apache2/virtualA-access.log combined
</VirtualHost>
<VirtualHost 192.168.0.3>
ServerName virtualB.apache2.com
DocumentRoot /var/www/virtualB
ErrorLog /var/log/apache2/virtualB-error.log
CustomLog /var/log/apache2/virtualB-access.log combined

13 de 29
Curso Mentor Apache

</VirtualHost>

Actividad 5.6

Enunciado:
Ejemplo mixto de hosts virtuales basados en direcciones IP y en nombres.
Solución:
Muestra la configuración de la red principal con un servidor virtual basado en IP y utilizando la interfaz con IP 192.168.1.1, y
además define 2 servidores virtuales sobre la IP 192.168.1.2 diferenciándolos por el nombre del host virtual. Es un ejemplo mixto.
Para ello hacemos una copia del host virtual por defecto 'default' que incluye Apache2 al instalar y le llamamos 'default-
copia'.
Editamos /etc/apache2/sites-available/default-copia y dejamos las líneas siguientes:

NameVirtualHost 192.168.0.1
<VirtualHost 192.168.0.1>
ServerName principal.apache2.com
DocumentRoot /var/www/principal
ErrorLog /var/log/apache2/principal-error.log
CustomLog /var/log/apache2/principal-access.log combined
<Directory "/var/www/principal">
AllowOverride None Options None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#Host virtual dominio-alfa
<VirtualHost 192.168.0.2>
ServerName dominio-alfa.apache2.com
DocumentRoot /var/www/dominio-alfa
ErrorLog /var/log/apache2/dominio-alfa-error.log
CustomLog /var/log/apache2/dominio-alfa-access.log combined
<Directory "/var/www/dominio-alfa">
AllowOverride None Options None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#Host virtual dominio-beta
<VirtualHost 192.168.0.2>
ServerName dominio-beta.apache2.com
DocumentRoot /var/www/dominio-beta
ErrorLog /var/log/apache2/dominio-beta-error.log
CustomLog /var/log/apache2/dominio-beta-access.log combined
<Directory "/var/www/dominio-beta">
AllowOverride None Options None
Order allow,deny
Allow from all
</Directory>

14 de 29
Curso Mentor Apache

</VirtualHost>

Actividad 5.7

Enunciado:
Servidor virtual por defecto "_default_"
Solución:
Existe un nombre o indicador de servidor virtual por defecto “_default_” que atiende aquellas peticiones que no son atendidas por
ningún otro servidor virtual.

<VirtualHost _default_>
DocumentRoot /www/defecto
</VirtualHost>

Se puede añadir después de la etiqueta "_default_" un número de puerto y de esa forma se podrían tener servidores por defecto
diferentes para cada puerto.

15 de 29
Curso Mentor Apache

Windows: Introducción

16 de 29
Curso Mentor Apache

Diferencias con Ubuntu


Diferencias con Ubuntu

La utilización de hosts virtuales en Windows funciona igual que en Edubuntu. La única diferencia es el archivo en el que residen y
el mecanismo de activación de los mismos.
Para cada sitio web que queramos ejecutar localmente habrá que elegir un nombre para él (procurando que no coincida con un
nombre no utilizado en Internet) y añadir la referencia en el archivo de resolución de nombres local C:\WINDOWS\system32
\drivers\etc\hosts:

127.0.0.1 localhost
192.168.0.1 servidor
192.168.0.1 servidor.apache2.com

La instalación de Apache2 en Windows crea un archivo httpd-vhosts.conf en el directorio de configuración C:\Archivos


de programa\Apache Software Foundation\Apache2.2\conf\extra\ que habrá que activar descomentando la
línea Include del archivo de configuración general httpd.conf y modificando la ruta:

#Include conf/extra/httpd-vhosts.conf

Es importante tener en cuenta que, aunque la ruta del archivo viene separada por '\' en la directiva utilizamos '/'.

17 de 29
Curso Mentor Apache

Host virtual basado en nombre


Creación de un host virtual

El archivo de configuración para los hosts virtuales viene con unos ejemplos que habrá que eliminar o actualizar con
los datos correctos de nuestros hosts virtuales.
Para preparar el nuevo sitio virtual, correspondiente al dominio virtual.apache2.com:

1. Editar el archivo C:\WINDOWS\system32\drivers\etc\hosts y añadir la línea:

192.168.0.1 virtual.apache2.com virtual

2. Crear   el   directorio   C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2\htdocs


\virtual
3. Crear   en   este   directorio   un   archivo   llamado index.html con   el   contenido:   “Servidor   virtual
virtual.apache2.com
4. Editar  el  archivo C:\Archivos de programa\Apache Software Foundation\Apache2.2\conf\extra
\httpd-vhosts.conf y dejar las líneas siguientes:

NameVirtualHost *:80
<VirtualHost *:80>
ServerName virtual.apache2.com
DocumentRoot   "C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/virtual"
CustomLog logs/virtual.access.log combined
ErrorLog logs/virtual.error.log
<Directory   "C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/virtual">
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost

El directorio indicado en DocumentRoot no debe acabar con '/'.

Creamos archivos diferenciados para almacenar los accesos y errores del sitio virtual.

5. Nuestro servidor servidor.apache2.com debe aparecer también como sitio virtual. Por lo tanto, añadimos en
este archivo el grupo de directivas que configuran este ServerName como host virtual.
La configuración final del archivo httpd-vhosts.conf será:

NameVirtualHost *:80
<VirtualHost *:80>
ServerName servidor.apache2.com
ServerAlias servidor
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs"
CustomLog logs/access.log combined
ErrorLog logs/error.log
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs>
Options Indexes FollowSymLinks MultiViews

18 de 29
Curso Mentor Apache

AllowOverride none
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName virtual.apache2.com
ServerAlias virtual
DocumentRoot   "C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/virtual"
CustomLog logs/virtual.access.log combined
ErrorLog logs/virtual.error.log
<Directory "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/virtual">
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
 

6. Activar el sitio descomentando la línea Include correspondiente en httpd.conf y ajustando la ruta:

Include conf/default/httpd-vhosts.conf

7. Reiniciar  el   servidor  para  que  lea  los   cambios   realizados   en  el   archivo  de  configuración.   Para  ello  ir  a  la  barra  de
herramientas y hacer clic sobre y seleccionar Apache Restart.
8. Ir   al   navegador   y   probar   la   URL   virtual.apache2.com.   Comprobar   que   se   visualiza   el   contenido   de
index.html para ese sitio virtual.
9. Ejecutar la siguiente orden para comprobar los hosts virtuales configurados: OJO

apache2 -S

Explicación de la configuración dada:
Con la directiva NameVirtualHost *:80 se le está diciendo a Apache2 que se activan los hosts virtuales por nombre y los
siguientes grupos <VirtualHost *>...</VirtualHost> definen los hosts virtuales de nuestro servidor. En cada uno de
estos bloques, se le indica a Apache2 el DocumentRoot del host especificado en ServerName.
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.
Si en el archivo httpd-vhosts.conf 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 de un servidor 'oficial' con varios hosts
virtuales, este servidor 'oficial' también aparezca como <VirtualHost> y esté en primer lugar.
Este primer host virtual está accesible siempre como http://localhost.

Importante

Si al acceder a un host virtual el navegador muestra un mensaje de error "403 Forbidden" comprobar si existe el archivo
index.html en el DocumentRoot del sitio, ya que, por defecto el servidor Apache2 no permite listar el contenido del
directorio.

19 de 29
Curso Mentor Apache

Si en DocumentRoot no existe un favicon.ico se genera un log de error en el archivo correspondiente. Recordar
que el favicon.ico es la pequeña imagen que aparece junto a al URL y que personaliza nuestro sitio web.
Se puede utilizar una dirección IP concreta en lugar de * y de esa forma podemos asignar varios hosts virtuales por
nombre a esta IP y otro grupo de hosts virtuales a otra IP. Sería una combinación de ambas técnicas.

20 de 29
Curso Mentor Apache

Actividades
Actividad 5.8

Enunciado:
¿Qué hay que hacer para poder acceder a un sitio web usando nombres diferentes?
Solución:
Para ello se utiliza la directiva ServerAlias (indica la lista de nombres que pueden usarse para acceder a un mismo sitio
web), puesta dentro de la sección <VirtualHost>.
En   el   caso   de   utilizar   el   sitio   por   defecto   se   podría   escribir   en   C:\Archivos   de   programa\Apache   Software
Foundation\Apache2.2\conf\extra\httpd-vhosts

ServerAlias *.apache2.com

entonces   las   peticiones   para   todos   los   hosts   en   el   dominio   apache2.com   serán   servidas   por   el   host   virtual
servidor.apache2.com.
Los caracteres comodines '*' y '?' permiten encontrar equivalencias con los nombres. Pero no podemos inventar nombres y
ponerlos   en  la  directiva  ServerName   o  ServerAlias.   Antes   hay   que  establecer  la  relación  IP-Nombre  bien  mediante  el
archivo hosts o mediante DNS.
Si   se   abre   el   navegador   se   comprobará   que   ahora   se   accede   a   la   página   inicial   de   Apache2   tanto   desde
servidor.apache2.com como desde virtual.apache2.com. Pero esto no interesa, así que podemos utilizar otro
ServerAlias que no sea tan genérico:

<VirtualHost *:80>
ServerName servidor.apache2.com
ServerAlias servidor

Actividad 5.9

Enunciado:
Host virtual basado en nombres (adecuar para DNS).
Solución:
Hasta hace relativamente poco tiempo, Windows utilizaba el servicio WINS para la resolución de nombres. A partir de Windows
2000 utiliza el servicio DNS que mantiene compatibilidad con WINS.
Windows por instalación lleva incluido el servicio de cliente DNS, pero no el de servidor.
Normalmente este servicio viene integrado en Active Directory en Windows 2003/2008 Server que funcionan como controladores
de dominio, pero no se aconseja su utilización de Active Directory desde estaciones de trabajo, que es el modo de utilización de
un Windows desktop.
De cualquier forma, sí que se puede instalar Active Directory en Windows desktop, pero no utilizando cdpromo sino utilizando el
AdminPack de 2003 /2008 server y puede ser un poco arriesgado.
Ya que nuestro servidor web Apache2 va a dar servicio a nuestra red local, la acción de resolución de nombres en Windows la
vamos a seguir dejando a cargo del archivo hosts.

21 de 29
Curso Mentor Apache

Host virtual basado en IP


Host virtual por IP

Apache2  puede  atender  varios  servidores  virtuales,   cada  uno  de  ellos  con  una  dirección  IP   diferente  utilizando  la  sección  de
configuración VirtualHost.
Esta sección, de la misma forma que para hosts virtuales por nombre, define una configuración y dirección IP para cada uno de
los sitios o hosts virtuales.
Por ejemplo:

<VirtualHost 192.168.0.1>
ServerName servidorA.apache2.com
ServerAlias servidorA
DocumentRoot   "C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/servidorA"
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB.apache2.com
ServerAlias servidorB
DocumentRoot   "C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/servidorB"
</VirtualHost>

El   ejemplo   define   dos   servidores   web,   cada  uno   de   ellos   con   una  IP   y   un   nombre  diferentes.   Ambos   tienen  su   propio
DocumentRoot y demás directivas básicas.
Lógicamente para poder definir servidores virtuales por IP  la máquina que alberga el sistema servidor debe tener configuradas
diferentes direcciones IP, bien porque dispone de varias tarjetas de red, bien porque ha creado varios alias.
Si nuestra máquina servidor dispone de dos direcciones IP y hemos asignado a las dos el mismo nombre, hemos de hacer un
uso especial de las directivas de servidores por nombre.
Por ejemplo, cuando se dispone una conexión de red para la red local y otra conexión diferente para Internet pero con el mismo
nombre, la configuración sería:

NameVirtualHost 192.168.1.1
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.1.1     192.168.0.1>
ServerName servidor.apache2.com
ServerAlias servidor
DocumentRoot   "C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/servidor"
</VirtualHost>

Esta configuración sirve la misma web hacia la red local y hacia Internet. En este caso es conveniente definir un alias para el
servidor y así no tener que usar dominios en la red local.

22 de 29
Curso Mentor Apache

Actividades
Actividad 5.10

Enunciado:
Combinar hosts virtuales basados en nombre y en IP.
Solución:
Supongamos que nuestro sistema dispone de varias direcciones IP y queremos que cada una de ellas soporte varios sitios web.
Hemos de proporcionar una directiva NameVirtualHost para cada dirección IP y repetir tantas secciones <VirtualHost>
como sitios queremos por IP.
Adaptar las IPs a los valores reales en el aula.

NameVirtualHost 192.168.0.1
NameVirtualHost 192.168.0.2
<VirtualHost 192.168.0.1>
ServerName servidorA1.apache2.com
DocumentRoot   C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/servidorA1
</VirtualHost>
<VirtualHost 192.168.0.1>
ServerName servidorA2.apache2.com
DocumentRoot   C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/servidorA2
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB1.apache2.com
DocumentRoot   C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/servidorB1
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB2.apache2.com
DocumentRoot   C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/htdocs
/servidorB2
</VirtualHost>

En  este  caso  no  incluimos   el  '*'  para  forzar  a  que  cada  servidor  escuche  por  una  IP   concreta,   pero  incluimos   la  directiva
NameVirtualHost cuyo argumento debe coincidir con el del servidor web con el que está conectado.

Actividad 5.11

Enunciado:
Servidor virtual por defecto "_default_"
Solución:
Existe un nombre o indicador de servidor virtual por defecto “_default_” que atiende aquellas peticiones que no son atendidas por
ningún otro servidor virtual.

<VirtualHost _default_>

23 de 29
Curso Mentor Apache

DocumentRoot   “C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2/htdocs


/defecto”
</VirtualHost>

Se puede añadir después de la etiqueta "_default_" un número de puerto y de esa forma se podrían tener servidores por defecto
diferentes para cada puerto.

24 de 29
Curso Mentor Apache

Glosario
Glosario Unidad 5

Concepto Definición
Permiten  la  posibilidad  de  alojar  varios   dominios   en  una  sola  máquina.   Es   decir,   se  trata  de  servir
Host Virtual
diferentes sitios web con una sola entidad de Apache.

El host virtual basado en IPs diferencia los sitios web basándose en sus direcciones IP.
Host Virtual IP

El host virtual basado en nombres usa sólo el nombre del host y de esta manera puede alojar muchos
Host Virtual Nombre
sitios web con la misma dirección IP.

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario


/glosario_internet.html
Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

25 de 29
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Página oficial de apache: http://www.apache2.es/2.2.2/
3. Página de PHP: http://php.net/manual/es/install.windows.apache2.php

26 de 29
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 5 'Hosts Virtuales'

Los puntos a destacar de esta unidad son los siguientes:

1. Los hosts virtuales Apache2 nos permiten la posibilidad de alojar varios dominios en una sola máquina.
2. El host virtual heredará los parámetros del host principal que no se cambien para él de forma explícita.
3. 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.
4. Como mínimo deben incluir las directivas DocumentRoot y ServerName.
5. Para usar hosts virtuales basados en nombre se debe especificar en el servidor qué dirección IP se va a usar para
atender las peticiones de los diferentes hosts mediante la directiva NameVirtualHost.
6. Dentro de cada bloque <VirtualHost>, necesitará como mínimo una directiva ServerName para indicar qué host se
sirve y una directiva DocumentRoot para indicar dónde están los contenidos a servir dentro del sistema de archivos.
7. La utilización de hosts virtuales en Windows funciona igual que en Edubuntu. La única diferencia es el archivo en el que
residen y el mecanismo de activación de los mismos. 

27 de 29
Curso Mentor Apache

Autoevaluación Unidad 5
Autoevaluación

El cuestionario de autoevaluación de la Unidad 5 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

28 de 29
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 5

29 de 29
Curso Mentor Apache

Apache
Unidad 6: Autenticación y control de acceso

En este capítulo aprenderás a:
los conceptos de autenticación o identificación, autorización y control de acceso.
los mecanismos de Apache2 para implementar estos conceptos.
los diferentes modelos de seguridad de Apache2
los métodos de autenticación HTTP básico y digest, características así como los grupos de directivas aplicables en ellos.

Material complementario:
1. Archivo con las actividades de la unidad. Archivo U6_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U6_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf

1 de 27
Curso Mentor Apache

Introducción
Objetivos

Conocer los conceptos de autenticación y control de acceso.

Conocer los tipos de autenticación disponibles desde Apache2.

Conocer la directivas de Apache utilizadas para el control de acceso.

Realizar la configuración del servidor apache para asegurar la autenticación.

Comprobar que los mecanismos de seguridad establecidos funcionan correctamente.

Conocimientos previos

En esta unidad estudiamos mecanismos de seguridad disponibles en Apache2.
El requerimiento básico es haber superado las anteriores unidades y disponer de un servidor Apache bien configurado en ambos sistemas
operativos .

Contenidos

Unidad 6: Autenticación y control de acceso

1. Conceptos Generales
2. Autenticación: modelo básico de seguridad de Apache2
3. Directivas de autenticación

A. Ubuntu

1. Autenticación y autorizacion HTTP
2. Control de acceso: directivas Allow y Deny
3. Autenticación HTTP básica
4. Autenticación HTTP digest

B. Windows

1. Autenticación en Windows
2. Autenticación HTTP básica
3. Autenticación HTTP digest

C. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 27
Curso Mentor Apache

Conceptos Generales
Autenticación, autorización y control de acceso

Cuando el servidor Apache recibe la petición de una página web, antes de ofrecerla lleva a cabo varias acciones para verificar que dicha
petición esta autorizada.
Estas acciones son:

1. Autenticación: proceso por el cual se verifica la identidad del usuario
2. Autorización:  proceso por el cual se verifica que un usuario de identidad conocida tiene acceso a la información solicitada.
3. Control de Acceso:  proceso por el cual se verifica que la máquina desde la que se ha hecho la solicitud de información tiene
acceso a la misma.

1.I dentificación o Autenticación
La primera operación se llama Identificación o Autenticación y su objetivo es comprobar la identidad del usuario, es decir, ¿es realmente
quien dice ser?. El usuario proporciona información acerca de su identidad para que el servidor pueda identificarle. Normalmente el usuario
da su nombre de usuario (login) y su contraseña. Estos dos datos también se llaman credenciales y si el servidor comprueba que estas
credenciales coinciden con las almacenadas en su base de datos, la primera operación está concluida.
Esta operación también puede ser realizada mediante la utilización de certificados digitales.
Aunque para la Autenticación se puede utilizar el propio archivo de usuarios del sistema (/etc/passwd) no es conveniente.
Mediante los diferentes módulos de autenticación (mod_auth_basic, mod_auth_digest, etc)  se utilizan archivos (htpasswd,
htdigest,...) que tienen una estructura similar a /etc/passwd y permiten autenticar usuarios no registrados en el sistema.
Si la autenticación de usuarios se hace mediante bases de datos el módulo utilizado es mod_auth_dbm y si se hace contra un
servidor LDAP el módulo es mod_authnz_ldap.
Si se quiere configurar tanto la Autenticación como la Autorización y el Control de acceso utilizando archivos .htaccess, es necesario
incluir la directiva AllowOverride asignándole el valor AuthConfig para permitir el uso de las distintas directivas de autenticación.
2. Autorización
La segunda operación es la Autorización. Cuando el usuario ha probado ser quien dice ser, el servidor debe comprobar si dicho usuario
tiene acceso a la información que pretende visitar. Para ello el servidor dispone de una lista de los usuarios que pueden acceder a los
recursos que ofrece.
Para la Autorización se suele utilizar listas de permisos en las que se enumeran cada una de las acciones que puede realizar un usuario, o
las que no puede hacer. Para facilitar el control de estas listas los usuarios se agrupan y los permisos se otorgan al grupo. Desde Apache2
la  Autorización  es   gestionada  mediante  directivas   <Directory>   en  el  archivo  de  configuración  o  mediante  la  utilización  de  archivos
.htaccess que configuran el directorio.
3. Control de acceso
El control de acceso se utiliza para establecer y controlar las máquinas que tienen acceso a un recurso independientemente del usuario que
accede, ya que este control se hace antes, en el proceso de Autenticación. Desde Apache2 el control de acceso se gestiona mediante las
directivas  <Directory>,   <Files>   y  <Location>,   o  mediante  el  archivo  de  configuración  .htaccess para  controlar  un  directorio
concreto.

3 de 27
Curso Mentor Apache

Autenticación: modelo básico de seguridad de


Apache2
Generalidades

El modelo básico de seguridad de Apache2 se basa en los conceptos de:

autenticación 'sencilla' > equivalente a la Autenticación y Autorización (Autenticación HTTP)
autenticación 'severa' > equivalente al Control de acceso (Autenticación Host)

La  autenticación  'sencilla'   depende  de  la  información  que  proporciona  el   usuario,   como  son  por  ejemplo,   el   nombre  de  usuario  y   la
contraseña.
La  autenticación  'severa'   utiliza  credenciales   que  han  sido  obtenidas   sin  preguntar  al  usuario  directamente,   como  es   por  ejemplo,   la
dirección IP de la máquina desde la que se conecta el usuario.
Según el tipo de autenticación, Apache2 responde con un tipo de error diferente.
Para la autenticación 'sencilla' si los datos no son correctos responde con un error 401 y permite infinitos reintentos.
En el proceso de autenticación 'severa' si las credenciales son erróneas Apache2 devuelve un error 403 de prohibición sin dar opción a
volver a intentarlo.
Se pueden combinar ambos tipos de autenticación mediante la utilización de la directiva Satisfy. Los casos posibles son:

No se requiere autenticación. Ninguna.
Sólo se requiere autenticación severa (IP).
Sólo se requiere autenticación sencilla (nombre de usuario y contraseña).
Se aceptan ambos tipos de autenticación y se permite el acceso si una de ellas es correcta.
Se requieren ambos tipos de autenticación.

Satisfy: especifica la política de acceso a seguir cuando se usan tanto Allow como Require.
Esta directiva sólo es útil si se va restringir el acceso a un área concreta con un nombre de usuario/contraseña y dirección del cliente.
Posibles parámetros de Satisfy:

All: el cliente debe pasar la restricción referente a la dirección (autenticación severa) e introduzca un nombre de


usuario y contraseña válidos (autenticación sencilla).
Any: el cliente debe pasar la restricción referente a la dirección o introduzca un nombre de usuario y contraseñas válidos. De
esta forma podemos restringir el acceso a una zona utilizando contraseña y permitir que navegadores que hagan peticiones desde
algunas direcciones concretas accedan sin contraseña.
Require selecciona qué usuarios autenticados pueden acceder a un recurso

Posibles utilizaciones:
1. Sólo los usuarios mencionados pueden acceder al recurso.

Require user userid [userid] ...

2. Sólo los usuarios pertenecientes a los grupos mencionados pueden acceder al recurso.
Require group group-name [group-name] ...

3. Todos los usuarios pueden acceder al recurso.
Require valid-user

Ejemplo: se quiere permitir que todo el mundo tenga acceso total a su red local o a una parte del sitio web, pero requerir que los visitantes
de fuera de la red local introduzcan una contraseña. La configuración sería similar a la siguiente:
Require valid-user
Allow from 192.168.0.
Satisfy Any

4 de 27
Curso Mentor Apache

Directivas de autenticación
A tener en cuenta...

1. Antes de comenzar a hablar acerca de las comunicaciones seguras en Apache2 debemos comprobar que Apache2 está compilado con
los módulos de seguridad que vamos a utilizar.
Para ver los módulos incluidos en Apache ejecutar:
#apache2 -l
Pero si queremos saber cuáles son los módulos activados hemos de acceder a /etc/apache2/mods-enabled/.
Para activar la autenticación necesitamos los módulos siguientes:

mod_auth_basic: para autenticación básica.
mod_auth_digest: para autenticación con el método digest (usuario y password encriptados).

Para utilizar los mecanismos proporcionados por Apache para el proceso de autenticación deben esta activado el módulo correspondiente al
método que se vaya a utilizar. Para ello utilizamos la orden a2enmod.
#a2enmod auth_basic
#/etc/init.d/apache2 force-reload

2. Las directivas utilizadas deben estar incluidas en el archivo de configuración del servidor:

bien en secciones <Directory> o
bien en archivos .htaccess de configuración por directorios

Para   utilizar  archivos .htaccess se   necesita   la   directiva   AllowOverride con   el  valor  AuthConfig que   permite   incluir
directivas relativas a la autenticación en estos archivos.

AllowOverride AuthConfig

Directivas de autenticación

Las directivas relacionadas con la autenticación son las siguientes:

Directiva Descripción

AuthType Indica cuál es el tipo de autenticación que va a utilizarse.

AuthName Indica el nombre del dominio de autenticación enviado al programa cliente.

AuthUserFile Indica   la   ruta   hacia   el   archivo   de   usuarios   para   la   autenticación   básica   (módulo
mod_auth).

AuthDigestFile Indica   la   ruta   hacia   el   archivo   de   usuarios   para   la   autenticación   MD5   (módulo
mod_digest). La orden htdigest gestiona este archivo. El algoritmo de codificación MD5
es mas seguro que el utilizado por el método básico.

AuthGroupFile Indica la ruta hacia el archivo de grupos (módulo mod_auth).

La  versión  de  Apache  2.2  incorpora  un  nuevo  conjunto  de  módulos   que  separan  el   control   de  la  autenticación  (mod_authn_*)   y   la
autorización de acceso (mod_authz_*).

5 de 27
Curso Mentor Apache

Ubuntu

6 de 27
Curso Mentor Apache

Autenticación y autorización HTTP


Autenticación y autorización HTTP

En el primer punto del capítulo se han explicado las diferentes operaciones que requiere Apache para permitir el acceso de los usuarios a
los recursos que él gestiona. Respecto al proceso de Autenticación existen dos métodos:

Básico o Simple: el usuario en el navegador web introduce su login o nombre de usuario y contraseña y se envían al servidor sin
cifrar.
Digest: el usuario en el navegador web introduce su login y contraseña y se envían al servidor cifrados.

En ambos métodos es Apache quien se encarga de comprobar, desde su archivo de texto, base de datos o servidor LDAP, que los valores
dados por el usuario son correctos.
Estos dos métodos sólo autentican al usuario cuando intenta acceder a un recurso. Apache comprueba si es un usuario válido, y le permite
o no acceder al 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.

7 de 27
Curso Mentor Apache

Control de acceso
Directivas Allow / Deny

Como ya se explicó en el punto primero, 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 Allow y Deny que permiten y rechazan, respectivamente, el acceso en función del nombre o la
dirección de la máquina desde la que se hace la solicitud de información.
Relacionada con ellas está la directiva Order que indica a Apache2 en qué orden tiene que aplicar las directivas Allow y Deny.
La sintaxis es:
Allow from dirección
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.
Ejemplos de utilización:
1. Denegar el acceso a la máquina con IP 250.66.19.10
Deny from 250.66.19.10
Los usuarios que se conecten a esta máquina no podrán ver ninguna información que esté afectada por esta directiva.
2. Denegar el acceso desde un nombre de máquina.
Si el nombre de la máquina es servidor.apache2.com
Deny from servidor.apache2.com
Las peticiones procedentes de dicha máquina serán denegadas.
3. Denegar el acceso a un dominio entero:
Si se quiere bloquear el acceso a un dominio entero se puede especificar sólo parte de una dirección o nombre de dominio:
Deny from 250.66.19
Deny from dominio1.com dominio2.com

Como ya sabemos la directiva Order indica en qué orden se aplican Allow y Deny. 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:
Order deny,allow
Deny from all
Allow from host.dominio1.com
Si se usa sólo la directiva Allow (sin combinar con Deny) se permitiría el acceso a usuarios de esa máquina y a cualquier otro usuario. Y
lo que se quiere es dejar entrar sólo a los de host.dominio1.com.

8 de 27
Curso Mentor Apache

Autenticación HTTP básica


Introducción

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.
La autenticación Básica utiliza el método de codificación Base64 (no encriptación) que puede, desde Perl y haciendo uso de la función
decode_base64, obtener la contraseña de cualquier usuario.
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:
<Directory "/var/www/privado">
AuthType Basic
AuthName "Directorio privado"
AuthUserFile /etc/apache2/passwd/.htpasswd
Require valid-user
</Directory>
Donde:
Directory: indica que las directivas siguientes actúan sobre el directorio /var/www/privado y sus subdirectorios. Por
lo tanto, se va a proteger este directorio y sus posibles subdirectorios.
AuthName: nombre  del dominio de  autenticación. Define  el conjunto  de  recursos que  estarán  sujetos a  los mismos
requisitos de autenticación. También es el texto que aparecerá en la ventana que pide el usuario y la clave e indica el
nombre del dominio de autenticación (realm). El navegador web lo utiliza para determinar qué contraseña enviar para
un dominio de autenticación dado.
En el ejemplo anterior, una vez que el usuario se ha autenticado en el dominio "Directorio privado", se intentará
utilizar   la   misma   contraseña   en   cualquier   'área'   del   mismo   servidor   que   tenga   el   mismo   valor   para   AuthName
"Directorio privado". De esa forma no se le pide al usuario de nuevo la contraseña.
AuthType: tipo de autenticación.
Basic: la contraseña se negocia sin encriptar
Digest: la contraseña se negocia encriptada
AuthUserFile: ubicación del archivo de texto que contendrá los nombres de usuario y contraseñas usadas en la autenticación
HTTP básica. Se suele llamar .htpasswd. Previamente hay que crear el directorio /etc/apache2/passwd.
AuthGroupFile: ubicación del archivo de texto que contendrá los nombres de los grupos y los usuarios asociados a ellos usados
en la autenticación HTTP básica. Se suele llamar .htgroup.
AuthAuthoritative:   toma  los  valores  On  (por  defecto)  y  Off.   Permite  que,   si  usamos  en  un  directorio  varios  métodos  de
autenticación diferentes y falla el primero, se pase al segundo.
Require: usuarios que tienen acceso a los recursos especificados. Opciones disponibles:

valid-user: cualquier usuario incluido en el archivo de contraseñas .htpasswd.
user <lista de usuarios>: lista de usuarios de .htpasswd, separados por espacios, que pueden acceder. Si se incluye
esta opción hay que incluir también la directiva AuthUserFile para indicar donde se encuentra el archivo con la definición
de los usuarios usados en la autenticación HTTP básica.
group <lista de grupos>: lista de grupos, separados por espacios, que pueden acceder. Si se incluye esta opción hay que
incluir  también  la  directiva  AuthGroupFile   para  indicar  donde  se  encuentra  el  archivo  con  la  definición  de  los   grupos
usados en la autenticación HTTP básica.

Satisfy: al utilizar esta directiva determina si se deben cumplir todos los requisitos (All) o cualquiera (Any).

9 de 27
Curso Mentor Apache

Configuración
Creación de un usuario

Para crear usuarios para el método de autenticación Básico se utiliza la orden htpasswd.
#htpasswd -c   /etc/apache2/passwd/.htpasswd    nombre_usuario
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.
Nota-1. 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.
Nota-2. 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.
Nota-3. Este método es útil cuando se trabaja con pocos usuarios, entendiendo por pocos hasta unos 100 usuarios. A partir
de esta cantidad conviene utilizar sistemas de autenticación que validen al usuario contra una base de datos.

Creación de un grupo

Para   generar  los  grupos  hay  que   crear  el  archivo   de   texto /etc/apache2/passwd/.htgroup con   el  formato   para   cada
línea:
nombreGrupo: user1 user2 user3 ...

La directiva AuthGroupFile indica la ruta completa donde se encuentra el archivo que hemos creado con la definición de los
grupos.
...............................
AuthGroupFile /etc/apache2/passwd/.htgroup
...............................

Cada usuario del grupo lo añadiremos al archivo de contraseñas según el apartado anterior.
Si se quiere indicar que el grupo no importa se escribe:
AuthGroupFile /dev/null

También se puede indicar cualquier usuario, siempre que esté en el archivo de contraseñas, utilizando la directiva Require:
Require valid-use

Actividad 6.1

Enunciado:
Ejemplo de creación de un usuario 'usuario1' con acceso restringido al sitio 'privado'.
Solución:

1. Creamos el directorio 'privado' con acceso restringido al usuario usuario1.
#mkdir /var/www/privado

Copiar a este directorio una página web sencilla que identifiquemos fácilmente de nombre index.html.
2. Creamos el directorio donde almacenar las contraseñas (si no existe), por ejemplo:

#mkdir /etc/apache2/passwd
Nota: es importante que el archivo .htpasswd no esté accesible desde la web (fuera de DocumentRoot).

10 de 27
Curso Mentor Apache

3. Damos de alta al usuario usuario1 en el archivo de contraseñas:
#htpasswd -c /etc/apache2/passwd/.htpasswd    usuario1
New password:XXXXXX
Re-type new password:XXXXXX
Adding password for user usuario1

4. Comprobamos que se ha dado de alta el usuario usuario1 en .htpasswd:
#more /etc/apache2/passwd/.htpasswd
usuario1:Uc2mbt97WwWCE

Autenticación HTTP básica

Ahora ya tenemos todo preparado para configurar las dos formas diferentes de autenticación básica.
1.  Globalmente : utilizando el archivo de configuración /etc/apache2/sites-available/default en el que habría que añadir
un bloque <Directory>...</Directory> para el directorio que queremos proteger:
Alias /privado /var/www/privado
<Directory "/var/www/privado">
AuthType Basic
AuthName "Directorio privado"
AuthUserFile /etc/apache2/passwd/.htpasswd
Require user usuario1
</Directory>
Recordar que hay que forzar a Apache2 a que lea sus archivos de configuración con force-reload.
Probamos la configuración desde el navegador: ir a la URL http://servidor.apache2.com/privado/ y aparece la ventana:

y visualizamos el contenido del archivo index.html creado en dicho directorio.

2.  Utilizando archivos.htaccess : las directivas incluidas en el archivo .htaccess se aplicarán sólo al directorio que lo contiene,


así como a todos sus subdirectorios.

Los archivos .htaccess se leen cada vez que hay una petición de páginas y no hay que reiniciar el servidor web para que se
activen los cambios realizados.
Creamos en /var/www/privado/ el archivo .htaccess con el contenido siguiente:
#vi /var/www/privado/.htaccess
AuthType Basic
AuthName "Directorio privado"

11 de 27
Curso Mentor Apache

AuthUserFile /etc/apache2/passwd/.htpasswd
Require user usuario1
Ahora   habría   que   comentar   en /etc/apache2/sites-available/default el   grupo   de   directivas   incluidas   para   la
autenticación  global  e  incluir  un  grupo  <Directory></Directory>   con  la  directiva  AllowOverride   que  habilite  la  utilización  de
archivos .htaccess con autenticación:

Alias /privado /var/www/privado
<Directory "/var/www/privado">
AllowOverride AuthConfig
</Directory>
Probamos la configuración desde el navegador mediante .htaccess.
Ir   a   la   URL   http://servidor.apache2.com/privado/   y   aparece   la   misma   ventana   anterior   pidiendo   la   identificación   del   usuario.
Visualizamos el contenido del archivo index.html creado en dicho directorio.

Actividad 6.2

Enunciado:
¿Cómo podemos eliminar un usuario del archivo de contraseñas?
Solución:
Utilizando la opción -D de la orden htpasswd.
Por ejemplo, eliminamos el usuario juan:
#htpasswd -D /etc/apache2/passwd/.htpasswd   juan

12 de 27
Curso Mentor Apache

Autenticación HTTP digest


Introducción

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:
#a2enmod auth_digest
#/etc/init.d/apache2 force-reload

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ía  que  añadir un  bloque  <Directory>...</Directory>
por cada directorio que queramos proteger:
<Directory "/var/www/privado">
AuthName "Directorio privado"
AuthType Digest
AuthDigestDomain http://servidor.apache2.com/privado/
AuthUserFile /etc/apache2/passwd/.htdigest
Require valid-user
</Directory>
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.
También se pueden utilizar archivos .htaccess creados en los directorios a proteger con este tipo de autenticación.

13 de 27
Curso Mentor Apache

Configuración
Creación de un usuario

La creación de usuarios en el método de autenticación Digest requiere la orden htdigest.
#htdigest /etc/apache2/passwd/.htdigest zona_privada nom_usuario
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 nuestro caso 'zona_privada' será sustituido por “Directorio privado”.
En el ejemplo añadimos el usuario usuario1 al archivo de contraseñas /etc/apache2/passwd/.htdigest. El programa nos
pedirá la clave y luego nos la vuelve a preguntar para confirmarla.
Si se utiliza el archivo .htdigest por primera vez y no existe, hay que incluir la opción -c:
#htdigest -c /etc/apache2/passwd/.htdigest “Directorio privado” usuario1
Adding password for usuario1 in realm Directorio privado.
New password: XXXXXX
Re-type new password: XXXXXX
El contenido almacenado en dicho archivo es el siguiente:
#more /etc/apache2/passwd/.htdigest
usuario1:Directorio privado:2a1bc3d31d53d6abf5c8143c2b3ab052

En   este   tipo   de   autenticación   HTTP   la   pertenencia   de   un   usuario   a   un   grupo   queda   determinada   por  su   inclusión   en   un
archivo de grupos y su referencia mediante la directiva AuthDigestGroupFile tanto en secciones <Directory> como en
archivos .htaccess.

Actividad 6.3

Enunciado:
Creación de un sitio 'privado' llamado "Directorio privado DIGEST" restringido al usuario1 mediante autenticación digest.
Solución:
1. Utilizamos el mismo directorio privado con acceso restringido al usuario usuario1 que con autenticación básica. En él disponemos de un
archivo index.html.
2. Utilizamos el mismo directorio donde almacenar las contraseñas /etc/apache2/passwd y  damos de alta al usuario usuario1 en el
archivo de contraseñas digest:

#htdigest -c /etc/apache2/passwd/.htdigest   “Directorio privado DIGEST”   usuario1

Autenticación HTTP digest

Podemos ahora establecer dos formas diferentes de autenticación:
1.   Globalmente:   utilizando   el  archivo   de   configuración /etc/apache2/sites-available/default en   el  que   habría   que
añadir un bloque <Directory>...</Directory> para el directorio que queremos proteger:

Alias /privado /var/www/privado
<Directory "/var/www/privado">
AuthType digest
AuthName "Directorio privado DIGEST"
AuthUserFile /etc/apache2/passwd/.htdigest

14 de 27
Curso Mentor Apache

Require user usuario1
</Directory>
Recordar que hay que forzar a Apache2 a que lea sus archivos de configuración con force-reload y probamos la configuración
desde el navegador:

Ir a la URL http://servidor.apache2.com/privado/ y aparece la ventana siguiente:

Al introducir las credenciales de usuario1 muestra:

2. Utilizando archivos .htaccess: las directivas incluidas en el archivo .htaccess se aplicarán sólo al directorio que lo contiene, así


como a todos sus subdirectorios.
Los archivos .htaccess se leen cada vez que hay una petición de páginas y no hay que reiniciar el servidor web para que se activen los
cambios realizados.
Utilizamos en /var/www/privado/ el archivo .htaccess ya creado, con el contenido siguiente:  

#vi /var/www/privado/.htaccess
AuthType digest
AuthName "Directorio privado DIGEST"
AuthUserFile /etc/apache2/passwd/.htdigest
Require user usuario1

Ahora habría que comentar en /etc/apache2/sites-available/default el grupo de directivas incluidas para la autenticación
global e incluir un grupo <Directory></Directory> con la directiva AllowOverride que habilite la utilización de archivos .htaccess con
autenticación:

Alias /privado /var/www/privado
<Directory "/var/www/privado">
AllowOverride AuthConfig
</Directory>

y visualizamos el contenido del archivo index.html creado en dicho directorio.


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.
Probamos la configuración desde el navegador mediante .htaccess
Ir   a   la   URL   http://servidor.apache2.com/privado/   y   aparece   la   misma   ventana   anterior   pidiendo   la   identificación   del   usuario.
Visualizamos el contenido del archivo index.html creado en dicho directorio.

Importante: desconexión

Importante: desconexión
Una vez se ha autenticado el usuario el navegador cachea la credencial (nombre de usuario y contraseña) de forma que, si el navegador
intenta   acceder   a   otro   recurso   de   la   zona   protegida,   el   servidor   devuelve   el   error   401   (Authorization   Required)   y   el   navegador

15 de 27
Curso Mentor Apache

automáticamente volverá a mandar las credenciales cacheadas al servidor.
Es decir, con la autenticación HTTP no se puede conseguir una desconexión automática pasado un determinado periodo de tiempo.

16 de 27
Curso Mentor Apache

Windows
A tener en cuenta ...

Los conceptos de Autenticación, Autorización y Control de acceso dados en el punto  de Conceptos Generales son igualmente válidos para
Windows.   En  consecuencia  ,en  este  punto  veremos   configuraciones   adaptadas   a  Windows   en  sus   archivos   correspondientes   de  los
ejemplos dados.
La  estudiada  directiva  AuthType   determina  el  tipo  de  autenticación  de  usuario:   basic   o  digest.   La  diferencia  entre  ellas   ha  sido  ya
explicada.

17 de 27
Curso Mentor Apache

Autenticación HTTP básica


Autenticación HTTP básica

De la misma forma que en Ubuntu, el funcionamiento de la autenticación HTTP básica es el siguiente. El navegador solicita el
acceso a un documento protegido y el servidor Apache2 envía una cabecera con el estado 401 y otra para la respuesta de
autenticación. La cabecera contiene el tipo de autenticación, en este caso básica, y el nombre del dominio.
El  navegador  muestra   un   ventana   en   la   que   solicita   el  nombre   de   usuario   y  la   contraseña.   La   información   es  enviada   al
servidor Apache2 que comprueba su validez. Si no es válida vuelve a solicitar la información volviendo a enviar las cabeceras
401 y la de autenticación.
A partir de ahora el servidor no pedirá autenticación por cada página del directorio que se consulte. El navegador envía la
información 'usuario/contraseña' que tiene en caché.
El  módulo   que   controla   este   método   de   autenticación   es mod_auth_basic cuya   línea   LoadModule  debe   ser  activada   el
archivo httpd.conf:
LoadModule auth_basic_module modules/mod_auth_basic.so

Además,   en   el  archivo C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf   habrá  que


añadir un bloque <Directory> ...</Directory> por cada directorio que se quiera proteger.
En el ejemplo siguiente hacemos uso de los hosts virtuales y planteamos el acceso por autenticación básica al directorio privado (habrá
que crear) y sólo está permitido a los usuarios incluidos en htpasswd que se validen correctamente.
El siguiente código habría que incluirlo en el archivo 
C:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\httpd-vhosts.conf

Alias /privado/ "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs

/privado"

<VirtualHost *:80>

DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"

ServerName servidor.apache2.com

ServerAlias servidor

ErrorLog "logs/error.log"

CustomLog "logs/access.log" common

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs

/privado">

AllowOverride FileInfo AuthConfig Limit

Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

<limit GET POST OPTIONS PROPFIND>

Order allow,deny

18 de 27
Curso Mentor Apache

Allow from all

</limit>

<limitexcept GET POST OPTIONS PROPFIND> httpd-vhosts.conf


Order deny,allow

Deny from all

</limitexcept>

AuthType Basic

AuthName "Directorio privado"

AuthUserFile "C:/Program Files/Apache Software Foundation/Apache2.2

/bin/passwd"

Require valid-user

</Directory>

</VirtualHost>

El significado de las directivas de configuración incluidas es idéntico que en Ubuntu. Lo único que cambia es la ruta y nombre
de los archivos y directorios implicados.
El   archivo C:/Program Files/Apache Software Foundation/Apache2.2/bin/passwd   que  almacena  los   usuarios   de
Apache2 con sus contraseñas, se crea utilizando la orden htpasswd.exe, que se encuentra en el directorio /bin/ de Apache2.
C:\Archiv...\Apache2.2\bin>htpasswd -nb nombre_usuario contraseña > passwd

Podemos utilizar la opción -c crea un nuevo archivo. Sólo habría que utilizarlo la primera vez ya que, si existe , reescribe y se pierderían los
demás usuarios.

La opción -b (modo batch) permite introducir la contraseña desde la línea de órdenes. La ventaja de usar -b es que permite introducir los
datos seguidos, pero tiene el inconveniente de que la contraseña es visible mientras se teclea.

Para añadir usuarios, una vez creado el archivo (-c) hay que ejecutar de la misma forma sin la opción -c. Si no se quiere que se vea la
contraseña no incluir la opcion -b.
Es importante que el archivo indicado en AuthUserFile esté ubicado fuera del directorio htdocs donde se alojan las páginas y evitar su
acceso a los usuarios, es decir, fuera de DocumentRoot. La estructura de dicho archivo es idéntica que en Ubuntu.
Si accedemos a http://servidor.apache2.com/privado aparece la ventana siguiente:

19 de 27
Curso Mentor Apache

Al introducir el nombre de usuario y contraseña se comparan con el contenido del archivo passwd para validar y muestra (por
ejemplo):

Si se quiere utilizar el archivo .htaccess en el directorio a proteger, la sección Directory incluida en httpd-vhosts.conf
se elimina y las directivas incluidas se añaden a .htaccess. Además deberemos incluir la directiva siguiente:
AllowOverride AuthConfig

También se puede controlar el acceso a nivel grupo. Para ello se definen grupos de usuarios y en vez de permitir el acceso
uno a uno, se autoriza al grupo.
Supongamos que los usuarios usuario1 y usuario2 forman parte de un grupo de usuarios que llamaremos users.
Creamos   un   archivo .htgroup en   la   carpeta C:\Archivos   de   programa\Apache   Software
Foundation\Apache2.2\bin\ con el Bloc de notas, que incluya una línea como esta:
users: usuario1 usuario2

El grupo de directivas que deberemos ahora incluir en la sección Directory de  httpd-vhosts.conf es el siguiente:
AuthType Basic
AuthName "Directorio privado"
AuthUserFile   “C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2
\bin\passwd”
AuthGroupFile   “C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2
\bin\.htgroup”
Require group users

20 de 27
Curso Mentor Apache

Autenticación HTTP digest


Autenticación HTTP digest

Comprobar que la línea LoadModule en httpd.conf correspondiente al módulo auth_digest está descomentada:

LoadModule auth_digest_module modules/mod_auth_digest.so

En  el archivo C:\Archivos de programa\Apache Software Foundation\Apache2.2\conf\httpd.conf habría  que


añadir un bloque <Directory>...</Directory> por cada directorio que queramos proteger:

<Directory   "C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2\htdocs


\privado">
AuthName "Directorio privado DIGEST"
AuthType Digest
AuthDigestDomain http://servidor.apache2.com/privado/
AuthUserFile   “C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2
\bin\.htdigest”
Require valid-user
</Directory

Creación de un usuario

El  archivo   C:\Archivos de programa\Apache Software Foundation\Apache2.2\bin\.htdigest  que  almacena  los


usuarios   de  Apache2  con  sus   contraseñas,   se  crea  utilizando  la  orden  htdigest.exe, que  se  encuentra  en  el  directorio  /bin/   de
Apache2.

C:\Archiv...\Apache2.2\bin>htdigest.exe -c .htdigest zona_privada nombre_usuario

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 nuestro caso 'zona_privada' será sustituido por “Directorio privado”.
En el ejemplo añadimos el usuario usuario1 al archivo de contraseñas .htdigest. El programa nos pedirá la clave y luego
nos la vuelve a preguntar para confirmarla.
Si se utiliza el archivo .htdigest por primera vez y no existe, hay que incluir la opción -c.
Si ahora vamos a http://servidor.apache2.com/privado nos pide la autenticación. Si escribimos el usuario elvira veremos que no nos da
paso, sin embargo, si indicamos el usuario1 y su contraseña veremos el contenido de la carpeta privado.

Utilizar archivos .htaccess

Las directivas incluidas en el archivo .htaccess se aplicarán sólo al directorio que lo contiene, así como a todos sus subdirectorios.


Los archivos .htaccess se leen cada vez que hay una petición de páginas y no hay que reiniciar el servidor web para que se activen los
cambios realizados.
Utilizamos   en  C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2   \htdocs\privado   el   archivo
.htaccess ya creado, con el contenido siguiente:
AuthName "Directorio privado"
AuthType Digest
AuthDigestDomain http://servidor.apache2.com/privado/

21 de 27
Curso Mentor Apache

AuthUserFile   “C:\Archivos   de   programa\Apache   Software   Foundation\   Apache2.2\bin


\.htdigest”
Require valid-user

Ahora  habría  que  comentar  en  httpd.conf  el  grupo  de  directivas  incluidas  para  la  autenticación  global  e  incluir  un  grupo  <Directory>
</Directory> con la directiva AllowOverride que habilite la utilización de archivos .htaccess con autenticación:
<Directory   "C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2   \htdocs
\privado">
    AllowOverride AuthConfig
</Directory>
Probamos la configuración desde el navegador mediante .htaccess.
Ir   a   la   URL   http://servidor.apache2.com/privado/   y   aparece   la   misma   ventana   anterior   pidiendo   la   identificación   del   usuario.
Visualizamos el contenido del archivo index.html creado en dicho directorio.

22 de 27
Curso Mentor Apache

Glosario
Glosario Unidad 6

Concepto Definición

Autenticación Proceso por el cual se verifica la identidad del usuario.

Autenticación básica El usuario en el navegador web introduce su login o nombre de usuario y contraseña y se envían al


servidor sin cifrar.

Autenticación digest El usuario en el navegador web introduce su login y contraseña y se envían al servidor cifrados.

Autenticación Host Conocida como autenticación 'severa' y equivalente al Control de acceso

Autenticación HTTP Conocida como autenticación 'sencilla' y equivalente a la Autenticación y Autorización.

Autorización Proceso por el cual se verifica que un usuario de identidad conocida tiene acceso a la información
solicitada.

Codificación MD5 Message Digest Authentication 5. E s un algoritmo de reducción criptográfico de 128 bits  para generar un


hash que es el que se transmite o envía al servidor.  El código MD5 fue diseñado por Ronald Rivest en
1991.

Codificación Base64 Es   un   sistema   de   codificación   que   permite   representar   datos   binarios   usando   únicamente   los   caracteres
imprimibles ASCII.

Control de acceso Proceso por el cual se verifica que la máquina desde la que se ha hecho la solicitud de información tiene acceso


a la misma.

Dominio de Define el conjunto de recursos que estarán sujetos a los mismos requisitos de autenticación.
autenticación

Hash Un hash o función resumen hace referencia a una función o método para generar claves que representen de
manera unívoca a un documento, registro, archivo, etc.

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

23 de 27
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Configuración global del servidor: http://httpd.apache.org/docs/2.0/es/server-wide.html
3. Introducción a los servidores web: http://www.cibernetia.com/
4. Conceptos sobre servidores web: http://trevinca.ei.uvigo.es/

24 de 27
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 6 'Autenticación, autorización y control de
acceso'
Los puntos a destacar de esta unidad son los siguientes:

1. La Identificación o Autenticación tinen como objetivo comprobar la identidad del usuario
2. La Autorización permite al servidor comprobar si el usuario tiene acceso a la información que pretende visitar
3. El Control de acceso se utiliza para establecer y controlar las máquinas que tienen acceso a un recurso independientemente del
usuario que accede
4. Para activar la autenticaciónse necesitan los módulos mod_auth_basic para autenticación básica  (usuario y password sin
encriptar)  y  mod_auth_digest para autenticación con el método digest (usuario y password encriptados).
5. La directiva AuthName indica el nombre del dominio de autenticación enviado al programa cliente.
6. 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.
7. Se pueden utilizar archivos .htaccess creados en los directorios a proteger con ambos tipos de autenticación básica y digest.

25 de 27
Curso Mentor Apache

Autoevaluación Unidad 6
Autoevaluación

El cuestionario de autoevaluación de la Unidad 6 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

26 de 27
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 6

27 de 27
Curso Mentor Apache

Apache
Unidad 7: Seguridad en Apache con SSL

 
En este capítulo aprenderás a:
el concepto de servidor seguro
las técnicas de criptografía simétrica y asimétrica
la instalación, activación y funcionamiento del módulo ssl
la configuración de un sitio seguro utilizando SSL
la creación de una Autoridad de Certificación
cómo obtener un certificado digital para el servidor seguro
cómo obtener un certificado digital para el cliente y ser firmado por una CA
cómo se instala un certificado personal en el navegador web
algunas indicaciones básicas sobre cómo salvaguardar la seguridad del servidor web

Material complementario:

1. Archivo con las actividades referidas a lo largo del capítulo. Archivo U7_Actividades.pdf

2. Mapa conceptual del capítulo. Archivo U7_mapaconceptual.png

3. Glosario completo del curso. Archivo glosario.pdf

1 de 39
Curso Mentor Apache

Introducción
Objetivos

Conocer   los   conceptos   básicos   sobre   seguridad   en   Apache2   y   de   la


criptografía en general.

Conocer términos como firma digital, autoridad de certificación,...

Realizar la instalación y configuración de OpenSSL.

Realizar la creación de una autoridad de certificación.

Utilizar los certificadosdigitales.

Utilizar un analizador de vulnerabilidades.

Conocimientos previos

En esta unidad explicamos los conceptos sobre seguridad en Apache2 y la configuración que debemos hacer sobre el servidor para
disponer  de  un  servidor  web  seguro.   El  requerimiento  es   haber  comprendido  y   realizado  las   actividades   de  la  unidad  6 y haber
entendido los conceptos explicados en esta unidad.

Contenidos

Unidad 7: Seguridad en Apache con SSL
A.General

1. Servidores seguros
2. Proceso de firma digital
3. SSL (Secure Sockets Layer)
4. Conceptos importantes

B. Ubuntu

1. SSL y Apache2
2. Autenticación del cliente mediante certificados.

C. Windows

1. Configuración del servidor SSL


2. Mecanismos de seguridad generales de Apache2

D. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 39
Curso Mentor Apache

Servidores seguros
SSL

SSL (Secure Socket Layer) es un protocolo que permite establecer una comunicación segura y codificada entre el servidor y el
navegador.
SSL se desarrolló para trabajar con el protocolo HTTP, creando un protocolo de transmisión de hipertexto seguro (HTTPS).
HTTPs se basa en dos tipos de criptografía:

Criptografía simétrica o de clave compartida
Criptografía asimétrica o de clave pública/privada

Se utilizan ambos tipos porque se aprovechan las ventajas de cada una y se evitan sus inconvenientes.
La criptografía asimétrica funciona bien para la autenticación, ya que cada usuario protege su clave secreta, pero es lenta para el
cifrado.
La criptografía simétrica es rápida en el cifrado y mala para la gestión de claves.
A continuación se incluye una breve explicación de cada una de ellas.

Encriptación simétrica o de clave compartida

Encriptación simétrica: técnica basada en la utilización de una clave conocida  tanto por el emisor como por el receptor o
destinatario. La misma clave que cifra en el origen descifra en el destino.

El usuario A y el usuario B conocen la clave K.
El 'Mensaje' original, utilizando un algoritmo de encriptación simétrico y la clave K, genera el 'Mensaje K' que es transmitido al
usuario B. Este, aplicando la misma clave y el algoritmo inverso, obtiene el 'Mensaje' original.
Ventaja:   es  muy  eficiente  para  el  cifrado  de  grandes  volúmenes  de  información  ya  que  los  algoritmos  utilizados  son  muy
rápidos. Pero, para que sea inalterable frente a ataques por criptoanálisis, la clave debe ser mayor de 40 bits. Cuanto mayor
sea el tamaño de la clave mas robusto será el algoritmo de cifrado.
Inconveniente: ambas partes deben conocer la clave. Se ha de transmitir la clave con el riesgo que esto supone.
Los algoritmos de cifrado simétrico más utilizados:
1. DES (Data Encryption Standard, 1976): está cayendo en desuso y ha sido reventado en numerosas pruebas de
criptoanálisis.

3 de 39
Curso Mentor Apache

2. IDEA (International Data Encryption Algorithm, 1992): trabaja con claves de 128 bits y nunca se ha roto, de momento.

Encriptación asimétrica o de clave pública/privada

Encriptación asimétrica: técnica basada en la utilización de dos claves: pública y privada.

La clave pública cifra
La clave privada descifra

Según esta técnica cada usuario tiene dos claves:

La clave pública es conocida por otros usuarios en otras máquinas. Se publica.
La clave privada solo la conoce el dueño de la clave. No se publica.

Estas claves se generan al mismo tiempo dando lugar a pares relacionados matemáticamente, de forma que la combinación pública-
privada es única.
El algoritmo utilizado tiene hasta 1024 bits, y tiene un coste de computación elevado.
La información que recibe un usuario será segura mientras él controle sus claves privadas. El usuario puede cambiar su clave privada
en cualquier momento y puede publicar su clave pública asociada para sustituir la clave pública obsoleta.
Según esta técnica:

1. el usuario A tiene dos claves, una pública y otra privada (que sólo conoce él).
2. se supone que el usuario A quiere transmitir un mensaje sólo al usuario B.
3. el usuario A conoce la clave pública de B y mediante un algoritmo de encriptación simétrico cifra el mensaje que transmite.
4. el usuario B, utilizando su clave privada y el algoritmo inverso, reproduce el mensaje original.

La utilización de esta técnica tiene como:
Ventaja:

la clave privada no se transmite.

Inconvenientes:

Esta técnica no utiliza algoritmos eficientes ya que no son rápidos cifrando y descifrando.
La garantía de la autenticidad de las claves públicas, es decir ¿quién garantiza que la clave pública de un usuario
es realmente de él? Aquí es donde entran en escena los certificados digitales de las claves públicas.

Esta técnica garantiza la:
1. Confidencialidad

El algoritmo garantiza que nadie que no conozca la clave privada del usuario B  puede obtener el mensaje original. Sólo el
destinatario legítimo (usuario B) podrá leer el mensaje.

2. Autenticidad

Con este tipo de criptografía, y haciendo un uso diferente de las claves públicas y privadas de los usuarios implicados, se
puede garantizar la autenticidad del origen, es decir, asegurar quien generó el mensaje.

En   la   figura   siguiente   el  usuario   A   cifra   el  mensaje   con   su   clave   privada   y  es  transmitido   al  usuario   B.   El  usuario   B
usando  la  clave  pública  del usuario  A  obtiene  el mensaje  original. Dado  que  esa  clave   es pública, cualquiera  puede
obtener el mensaje, pero esto garantiza al usuario B que la única persona que pudo haberlo generado es el usuario A
(ya que solamente él conoce la clave privada con que fue cifrado). Se garantiza la autenticidad.

4 de 39
Curso Mentor Apache

Los algoritmos de clave pública más conocidos son:

1. RSA (Rivest-Shamir-Adelman, 1977) que es el más utilizado pero menos seguro.

2. DSA (Digital Signature Algorithm) que ofrece un mayor grado de seguridad.

5 de 39
Curso Mentor Apache

Proceso de firma digital


Proceso de firma digital

¿En que consiste el proceso de firma digital?

La figura siguiente muestra la técnica de firma digital sobre un mensaje.

1. El usuario remitente aplica un algoritmo hash sobre los datos y genera un hash.
2. El usuario remitente con su clave privada transforma el hash en una firma digital.
3. El usuario remitente envía al usuario destinatario los datos, la firma y el certificado digital del remitente.
4. El usuario destinatario aplica el algoritmo hash a los datos recibidos y genera un valor hash.
5. El usuario destinatario utiliza la clave pública del usuario remitente y el valor has obtenido para comprobar la firma.

Si coincide se pueden asegurar dos cosas:

el mensaje no ha sido modificado:  integridad del mensaje
la única persona que lo ha podido firmar ha sido el remitente:  identidad del firmante

ya que es el único que posee la clave privada que se corresponde con la clave pública con que se ha descifrado. Todo el proceso es
transparente al usuario.
La asociación entre la firma digital y la persona que la utiliza es el objetivo de los certificados digitales.

Saber más ... sobre la firma digital y firma electrónica

La firma electrónica es un concepto directamente relacionado con la firma digital, sin embargo no son lo mismo, a pesar del
extendido uso indistinto y de una utilización léxica y práctica muy similar de estos dos conceptos.

6 de 39
Curso Mentor Apache

7 de 39
Curso Mentor Apache

SSL (Secure Sockets Layer)


Servicios en Ubuntu

8 de 39
Curso Mentor Apache

SSL permite establecer, de forma sencilla, conexiones seguras a través de Internet ya que todos los datos que se transfieren entre el
navegador web (cliente) y el servidor van cifrados.
TSL   (Transport   Layer  Security)  es   la  evolución  de  SSL  y   lo  sustituirá  con  el  tiempo.   De  hecho  la  versión  1  de  TLS   coincide
prácticamente con la versión 3 del protocolo SSL.
En  la  Unidad  6  se  vieron  los  mecanismos  que  proporciona  Apache2  para  la  transmisión  de  las  credenciales  de  usuario  desde  el
navegador hacia el servidor. Se comprobó que la autenticación digest aseguraba esta transmisión enviando la identificación de usuario
encriptada. Pero en ningún caso se aseguraba la transmisión completa encriptada.
La utilización de SSL garantiza que todo el intercambio de información realizado durante una sesión de conexión se lleva a cabo de
forma segura mediante encriptación.
SSL en una conexión TCP/IP proporciona:

1. Confidencialidad: mediante el cifrado de la información transferida.
2. Integridad   del   mensaje:   mediante  el   control   sobre  cualquier   modificación  intencionada  o  accidental   en  la  información
mientras viaja por Internet.
3. Autenticación del servidor: el usuario puede asegurarse de la identidad del servidor al que se conecta y al que posiblemente
envíe información personal confidencial. Proporcionado por el certificado de servidor.
4. Autenticación de cliente: el servidor conoce la identidad del usuario y le permite o no su acceso a áreas protegidas. Para
ello el cliente debe tener instalado un certificado de cliente en su ordenador que identifica el servidor al cliente. Se evitan así
ataques  comunes  de  captación  de  contraseñas  mediante  el  uso  de  analizadores  de  protocolos  (sniffers)  o  la  ejecución  de
reventadores  de  contraseñas.   De  todas  formas,  son muy pocos los servidores web  que  autentican  a  los  usuarios  de  esta
manera.

SSL puede utilizar una clave de sesión de 40 o 128 bits. Esta clave se genera en cada transacción. En la medida que la longitud de
la clave sea mayor se hará más difícil romper la encriptación. La mayoría de los navegadores soportan claves de sesión de 128 bits.
SSL crea una capa (layer) entre el protocolo de HTTP y el protocolo de transporte TCP como muestra la figura siguiente:

La comunicación se realiza en dos fases:

1. Fase de saludo (handshaking, estrechar las manos): el cliente y el servidor se identifican mediante el intercambio de claves
públicas (encriptación asimétrica) y llevan a cabo la autenticación utilizando certificados digitales.
2. Fase de comunicación: se realiza el intercambio de datos utilizando (generalmente) una clave de tipo simétrico.

Los  navegadores  llevan  ya  incorporados  un  módulo  SSL  que  se  activa  de  forma  automática  cuando  es  necesario.   Normalmente
cuando en la URL se escribe https://.

9 de 39
Curso Mentor Apache

Conceptos importantes
Certificado digital y Autoridad de certificación

10 de 39
Curso Mentor Apache

A. Certificado digital (CSR): conjunto de caracteres añadidos al documento (o archivo) que acredita

  al autor (Autenticación)
 y  no ha existido ninguna manipulación de los datos (Integridad).

Contiene  la  clave  pública  y  datos  identificativos  (nombre,   apellidos,   DNI,...)  firmados  digitalmente  por  una  Autoridad  Certificadora
(CA) en la que todos confían.
La CA es la tercera parte de confianza que permite que, personas que no se conocen entre sí, puedan confiar en los certificados que
se presentan el uno al otro. Son CA, por ejemplo, la Fábrica Nacional de Moneda y Timbre o Verisign.
El objetivo del certificado digital es asociar una clave pública a un usuario determinado.
El   Certificado   digital   es   utilizado   por   el   usuario   para   firmar   sus   mensajes   utilizando   su   clave   privada   (criptografía
asimétrica), que sólo el conoce y que impide que pueda después negar que es el autor.
La validez de la firma puede ser comprobada por cualquier otro usuario que tenga la clave pública del autor.
Funcionamiento:

A firmar el usuario un mensaje se aplica un algoritmo hash (MD5 ó SHA-1) sobre el texto y se obtiene un extracto o resumen
de longitud fija, que es específico para ese mensaje. Cualquier cambio en el mensaje, por pequeño que fuera, generaría un
resumen diferente, y no se correspondería con el que inicialmente firmó el usuario. El resumen obtenido (según el algoritmo
utilizado) tendrá una longitud entre 128 y 160 bits. A continuación se cifra mediante la clave privada del usuario. El algoritmo
de encriptación asimétrica más utilizado en este paso es el RSA. Así se obtiene un resumen final cifrado con la clave privada
del usuario, que se añade al final del mensaje para que se pueda verificar la autoría e integridad del mensaje por usuarios
interesados que tengan la clave pública del usuario autor del mensaje.

Comprobación:

La  validez  del  mensaje,   documento  o  archivo  se  comprueba  mediante  la  clave  pública  del  autor.   El  usuario  que  recibe  el
mensaje dispone de la clave pública de remitente que ha obtenido a través de una CA y con ella descifra el resumen cifrado
del usuario autor y luego calcula el resumen hash que le correspondería al texto del mensaje recibido. Si ambos resultados
coinciden el documento no ha sufrido ninguna modificación y es válido. Si no coinciden no es válido

Legalmente la firma electrónica basada en un certificado digital tiene la misma validez jurídica que la firma manuscrita. Es el sistema
utilizado en la e-administración.
La identificación personal basada en un certificado digital tiene la misma validez que la presentación del DNI.
 
B. Autoridad de Certificación (CA): entidad en la que confían tanto el emisor del mensaje como el receptor. Por tanto, confían
también en los certificados digitales que emite dicha entidad.

Su objetivo es acreditar la correspondencia entre una clave y su propietario real.
Actúa como un notario 'electrónico' que extiende un certificado de claves que está firmado con su propia clave privada.
Todos los usuarios que poseen la clave pública de la CA pueden comprobar la validez del certificado y si éste ha sido
modificado.

La ley de firma electrónica define las CA como "prestadoras de servicios de certificación" y, según la legislación de cada país, "son
aquellas  personas  físicas  o  jurídicas  que  expiden  certificados,   pudiendo  prestar,   además  otros  servicios  en  relación  con  la  firma
electrónica".
Muchos navegadores que soportan SSL tienen una lista de CA cuyos certificados son automáticamente aceptados. Si no está en la
lista el navegador pregunta al usuario si acepta o no la conexión.
 
Certificado (CRT): un CSR firmado por la CA es un CRT.
El archivo CRT contiene la clave pública del usuario, su nombre, el nombre de la CA, y está firmado digitalmente por la CA. De esta
forma otras entidades pueden verificar esta firma para comprobar la veracidad del certificado.

11 de 39
Curso Mentor Apache

Ubuntu: SSL y Apache2


Módulo se seguridad

El módulo de seguridad mod_ssl proporciona encriptación para el servidor web Apache2 a través de los protocolos SSL (Secure
Socket   Layer)   y   TLS   (Transport   Layer   Security).   Este  módulo  utiliza  las   librerías   y   herramientas   OpenSSL  que  proporcionan
comunicaciones encriptadas.
El módulo mod_ssl está disponible en el paquete apache2-common.
Para compilar Apache con soporte SSL es necesario tener instalado los fuentes de openssl, ya que al compilar se necesitan los
ficheros de cabecera (.h). También necesitamos tener instalado openssl para poder trabajar con los certificados.
Para instalar ambos paquetes ejecutar:

#apt-get install openssl libssl-dev

El paquete OpenSSL proporciona:

La librería crypto que implementa gran cantidad de algoritmos criptográficos muy utilizados.
La librería ssl que implementa los protocolos SSL y TSL.
La aplicación openssl (funciona en línea de comandos) que permite la utilización de la librería crypto. Puede hacer, entre
otras tareas, lo siguiente:
creación de claves RSA, DSA
creación de certificados X.509, CSR y CRL
calcular el MD5
encriptar y desencriptar
Para crear nuestra propia CA

El módulo mod_ssl tiene las siguientes directivas de configuración, muchas de las cuales se utilizan desde el propio archivo de


configuración específico del módulo, /etc/apache2/mods-available/ssl.conf.

La directiva de carga del modulo mod_ssl se encuentra en el archivo /etc/apache2/mods-available/ssl.load.

Directivas relacionadas con SSL

Directiva Descripción
SSLEngine Activa el motor SSL

SSLCACertificateFile Indica el archivo con el certificado de la Autoridad de Certificación

SLCARevocationFile Archivo con la lista de certificados revocados (CRL) por la Autoridad de Certificación.

SLCertificateFile Archivo del certificado del servidor que puede incluir su clave privada.

SLCertificateKeyFile Archivo con la clave privada y codificada del certificado. Debe estar protegido.

SSLOptions Opciones SSL para directorios.

SSLProtocol Protocolos usados (SSLv2, SSLv3, TLS).

12 de 39
Curso Mentor Apache

Directiva Descripción
SLRequire Definición de requisitos de acceso.

SLRequireSSL Indica la obligación de usar HTTPS.

SSLUserName Variable que almacena el nombre de usuario.

SSLVerifyClient Nivel de verificación de clientes.

13 de 39
Curso Mentor Apache

Autoridad de certificación
Creación de nuestra propia CA

Certificado del servidor SSL
Para poder establecer una conexión SSL la máquina destino requiere un certificado de servidor.
El certificado de servidor contiene la firma de la Autoridad Certificadora (CA), la clave pública del destinatario, la fecha de caducidad,
etc.
Podemos solicitar un certificado digital a una Autoridad Certificadora (CA) pero cobrará por ello. Sin embargo podemos, mediante
openssl, crear nuestra propia Autoridad Certificadora transformando nuestro servidor en un servidor SSL y transmitir la información
cifrada sin ningún gasto.
Lógicamente   los   certificados   emitidos   por   nuestra   CA   no   tienen   ninguna  validez   en   entornos   de   producción.   Los   certificados
auto-firmados no son aceptados automáticamente en ningún navegador.
Un servidor web es seguro cuando utiliza una combinación del protocolo SSL (HTTPs) para poder enviar la información cifrada y
un certificado digital proporcionado por una CA.

Se reconoce el uso de comunicaciones mediante SSL porque en la URL aparece el prefijo https://.
El certificado digital, una vez autogenerado u obtenido, se debe de instalar en el servidor seguro SSL.
Para instalar el certificado en el servidor seguro SSL:
1. Comprobar si se tiene instalado el paquete openSSL y activado el módulo mod_ssl:

#ls /etc/apache2/mods-enabled

2. Comprobar que está activado el módulo SSL. Si no aparece utilizar la orden:

#a2enmod ssl

3. Instalar o comprobar si está instalado el paquete openssl:

#dpkg -s openss

La configuración la vamos a hacer sobre el servidor web de ejemplo servidor.apache2.com.

4. Ir a /etc/apache2 y crear el directorio /ssl en el se guardará el certificado que vamos a generar.

5.   Necesitamos   descargar   el   paquete   tar apache2-ssl.tar.gz disponible   en   http://librarian/7477840/apache2-ssl.tar.gz   y


descomprimirlo.

#wget http://librarian.launchpad.net/7477840/apache2-ssl.tar.gz
#gunzip apache2-ssl.tar.gz
#tar xvf apache2-ssl.tar
#sudo cp apache2-ssl-certificate /usr/sbin/
#sudo cp ssleay.cnf /usr/share/apache2/

Este paquete tar contiene dos archivos:

ssleay.cnf que hemos copiado en /usr/share/apache2
apache2-ssl-certificate que hemos copiado en /usr/sbin

6. Generar las claves asimétricas y el certificado (autofirmado) de la CA, y que en nuestro caso también van a ser del servidor SSL.

# apache2-ssl-certificate
creating selfsigned certificate
replace it with one signed by a certification authority (CA)

enter your ServerName at the Common Name prompt

14 de 39
Curso Mentor Apache

If you want your certificate to expire after x days call this programm
with -days x
Generating a 1024 bit RSA private key
......................++++++
.....++++++
writing new private key to '/etc/apache2/ssl/apache.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:ES
State or Province Name (full name) [Some-State]:España
Locality Name (eg, city) []:Valencia
Organization Name (eg, company; recommended) []:ITE
Organizational Unit Name (eg, section) []:CURSO MENTOR
server name (eg. ssl.domain.tld; required!!!) []:servidor.apache2.com
Email Address []:webmaster@apache2.com

Con ello hemos creado el archivo /etc/apache2/ssl/apache.pem que contiene las claves (RSA PRIVATE KEY) y el
certificado (CERTIFICATE) pertenecientes al servidor servidor.apache2.com, firmado por nosotros mismos.
# more /etc/apache2/ssl/apache.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDdrNsQAj+2kG1qWe8JEGpn+GYYDmaxK1mArZx/5H6/AGGagB09
aoUkEKXDUNkQBIBUcJIa3idmU/ZYZays4oaoyOq48buyOQB4gSZWBQ+oJDKjGexV
..............................................
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICtzCCAiACCQDQKZM/WWiK2jANBgkqhkiG9w0BAQQFADCBnzELMAkGA1UEBhMC
RVMxEDAOBgNVBAgUB0VzcGHDsWExETAPBgNVBAcTCFZhbGVuY2lhMRQwEgYDV
..............................................
-----END CERTIFICATE-----

Instalar el certificado

Para ello:
1. Creamos los directorios y archivos necesarios:

#cd /etc/apache2/ssl
#mkdir miCA
#mkdir miCA/private
#mkdir miCA/newcerts
#touch miCA/index.txt

Importante: todas las órdenes se ejecutan desde /etc/apache2/ssl.

2. Copiamos las claves de la CA al directorio correspondiente con el nombre cakey.pem:

#cp apache.pem miCA/private/cakey.pem

3. Copiar el certificado de la CA al lugar necesario

15 de 39
Curso Mentor Apache

#cp apache.pem miCA/cacert.pem

4.   Crear/Editar   el   fichero  miCA/serial   y  guardarlo  en  modo  texto.   Su  contenido  debe  ser  una  línea  con  el  valor  01,   como  se
muestra a continuación.

#more miCA/serial
01

Ahora  lo  único  que  queda  pendiente  es  incluir  en  el  sitio  las  directivas  que  indican  que  el  acceso  al  mismo  se  hace  mediante  el
protocolo HTTPs. 

16 de 39
Curso Mentor Apache

Configuración del servidor SSL


Opciones de configuración

Existen varias posibilidades para configurar SSL.

Cualquier cliente web puede conectarse a una URL determinada, usando https. En este caso el servidor enviará su certificado
al cliente para que este pueda descifrar la información que le llega del servidor y cifrar la que envía hacia el servidor.
Sólo los clientes web que tengan un determinado certificado pueden conectarse a una determinada URL.
Combinar  el  primer  ejemplo  con  las   técnicas   de  autenticación  que  hemos   visto  antes.   De  forma  que  cuando  intentemos
acceder a una determinada URL usando https tendremos que autenticarnos primero.

Configurar TODO el sitio web como servidor seguro

1. Tomamos como referencia el archivo /etc/apache2/sites-available/default-ssl generado.

2. Tomamos   como   comienzo   del   sitio   web   (DocumentRoot)   el   directorio /var/www/htmls. Creamos   el   directorio
/ var/www/htmls, donde vamos a situar las páginas del servidor seguro.
3. Creamos un archivo index.html con un texto indicativo para poder probar.

4. Eliminar el enlace simbólico del archivo /etc/apache2/sites-available/default en sites-enabled. De esta


forma sólo estará disponible el sitio seguro default-ssl.

# a2dissite default

El contenido del archivo default-ssl deberá ser similar a:


NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin webmaster@apache2.com
ServerName servidor.apache2.com
DocumentRoot /var/www/htmls
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/miCA/cacert.pem
SSLCertificateKeyFile /etc/apache2/ssl/miCA/private/cakey.pem
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/htmls>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

17 de 39
Curso Mentor Apache

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 /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

El puerto 443 es el estándar para servidores web seguros. Lo añadimos al archivo /etc/apache2/ports.conf. Hay


que tener cuidado si existe esta misma línea en otro archivo de configuración ya que daría un mensaje de error.

Listen 443

Añadimos nuestro sitio seguro a los sitios disponibles con:

#a2ensite default-ssl
Site default-ssl installed; run /etc/init.d/apache2 reload to enable.

Reiniciamos Apache2 para que lea la nueva configuración.

#/etc/init.d/apache2 reload

Abrimos el navegador y damos la URL https://servidor.apache2.com y aparece la siguiente ventana indicando que el certificado de
que dispone este sitio ha sido emitido por una entidad desconocida:

18 de 39
Curso Mentor Apache

Pulsamos en Entiendo los riesgos y a continuación en Añadir Excepción. Luego pulsar sobre Confirmar excepción de seguridad.
Nos muestra nuestro texto de bienvenida al servidor seguro:

Si el certificado obtenido queremos tenga un mayor plazo de validez (por defecto tiene un mes) habría que ejecutar la orden con los
argumentos siguientes:

# apache2-ssl-certificate --force -days 365

Previamente tendríamos que eliminar el certificado anterior y recargar Apache2.

Actividad 7.1

19 de 39
Curso Mentor Apache

Enunciado:
¿Cómo comprobaríamos que tenemos dos servidores web escuchando?
Solución:
Si ejecutamos la orden:

#netstat -atup |grep /apache2
tcp6 0 0 *:www *:* LISTEN 12424/apache2
tcp6 0 0 *:https *:* LISTEN 12424/apache2

Otra forma sería utilizando la orden nmap (comprobar que el paquete nmap está instalado):

#nmap localhost
80/tcp open http
443/tcp open https

Configurar parte del servidor web como sitio seguro

En este caso se quiere que sólo una parte del sitio esté disponible como sitio seguro mediante SSL. Por ejemplo todo lo que haya
detrás de /var/www/htmls/

1. Volver a crear el enlace de /etc/apache2/sites-available/default en sites-enabled mediante la orden


a2ensite.
2. Añadir   en /etc/apache2/sites-available/default las   líneas   que   indican   que   el   directorio /var/www
/htmls requiere SSL.

<Directory /var/www/htmls>
SSLRequireSSL
</Directory>

El   archivo   /etc/apache2/sites-available/default-SSL   se   puede   simplificar  y   dejar  sólo   lo   justo   para   poder


visualizar páginas html de forma segura al acceder a /var/www/htmls.
NameVirtualHost *:443
<VirtualHost _default_:443>
  ServerName servidor.apache2.com
DocumentRoot /var/www/htmls
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/miCA/cacert.pem
SSLCertificateKeyFile /etc/apache2/ssl/miCA/cakey.pem
<Directory /var/www/htmls>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
ServerSignature On
</VirtualHosst>

La parte del servidor web accesible sin validación SSL (/var/www) quedaría así:

20 de 39
Curso Mentor Apache

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@apache2.com
ServerName servidor.apache2.com
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None

</Directorry>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
        Order allow,deny
Allow from all
</Directory>
<Directory /var/www/htmls>
       SSLRequireSSL
</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

LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
LogFormat   "%v   %h   %l   %u   %t   \"%r\"   %>s   %b   \"%{Referer}i\"   \"%{User-Agent}i\""
combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" common
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None

Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128

</Directory>

</VirtualHost> 

Si  vamos  ahora   al  navegador  y  escribimos  en   la   URL: http://servidor.apache2.com se   nos  abre   la   página   de
Apache2   para   la   parte   no   segura   (/var/www/)   y   si  escribimos https://servidor.apache2.com se   nos   abre   el
directorio que hemos declarado como seguro (/var/www/htmls).

21 de 39
Curso Mentor Apache

Si aparece el mensaje de error tipo 'sockets 443...' es porque existe un archivo en /var/run/apache2.pid que hay que
eliminar. Parece que intenta escuchar en el puerto 443 pero no puede.

22 de 39
Curso Mentor Apache

Autenticación del cliente mediante certificados


Proceso

Con lo que hemos explicado hasta ahora conseguimos que las comunicaciones entre el servidor web y los navegadores
(clientes web) se haga cifrada.
El servidor se ha identificado mediante un certificado, pero podemos hacer que el cliente también lo haga.
Lo que tenemos que hacer es generar certificados para los clientes y poner la directiva  SSLVerifyClient con el valor
“require” (en lugar de “none” que es el valor por defecto) incluida en la sección Directory correspondiente a la zona segura.
Para ello hay que realizar las acciones siguientes:

1. Creación de una clave privada (KEY)
2. Generación de una solicitud de certificado (CSR), que en nuestro caso es autogenerado
3. Instalación del certificado (CRT)

1. Generar clave privada
Generamos un Certificado para uso personal. Como usuario y desde su home.
Generamos la clave privada triple-DES  mediante algoritmo RSA, tamaño de la clave 1024 y archivo de salida privada.key en el
directorio home del usuario:

$openssl genrsa -des3 -out privada.key 1024
Generating RSA private key, 1024 bit long modulus
..............++++++
e is 65537 (0x10001)
Enter pass phrase for privada.key: soyelvira
Verifying - Enter pass phrase for privada.key: soyelvira

2. Petición de certificado
Hay que realizar la petición de certificado en el formato estándar PKCS#12 para que la firme la Autoridad Certificadora. La extensión
suele ser .csr (Certificate Signing Request, Petición de Firma de Certificado) y contiene la clave pública y los datos identificativos
para que los firme la CA.
En general, el archivo .csr es el que se envía a la entidades certificadoras cuando se solicita el CSR. Pero también nuestro sistema
puede generar un Certificado AutoGenerado que permitirá trabajar de forma segura, pero advirtiendo siempre a los clientes que el
certificado no puede ser validado en una entidad certificadora.
En el caso de una persona, los campos identificativos serán el Common Name (CN) con el nombre y DNI de la persona (esto es una
convención utilizada, por ejemplo, por la Fábrica Nacional de Moneda y Timbre) y la dirección de correo electrónico, que servirá para
enviar correos cifrados y firmados.
El valor del campo Organization Name (Nombre de la Organización), debe coincidir con el de la Autoridad Certificadora.
Como usuario y desde su home, ejecutar:

#openssl req -config openssl.cnf -new -key usuario.key -out usuario.csr
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:España
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ITE
Organizational Unit Name (eg, section) []: CURSO MENTOR
Common Name (eg, YOUR name) []:Usuario
Email Address []:
Please enter the following 'extra' attributes

23 de 39
Curso Mentor Apache

to be sent with your certificate request
A challenge password []:
An optional company name []:

3. Firma del certificado
La Autoridad Certificadora (nuestro servidor SSL) firma el certificado.
Es posible que devuelva algún error de archivo no encontrado. En ese caso hay que revisar en /usr/lib/ssl/openssl.cnf los
caminos hasta los archivos cakey.pem, index.txt, serial, etc son correctos.

# vi /usr/lib/ssl/openssl.cnf
dir = ./miCA

Modificar permisos de cakey.pem añadiendo lectura para todos:

# chmod a+r /etc/apache2/ssl/private/cakey.pem

Comprobamos que el certificado expedido tiene validez de 365 días.
¡¡¡¡¡¡¡¡¡¡¡¡¡ OJO con las mayúsculas y minúsculas!!!!!!!!!!!!!!
Hay que ejecutar como root (o sudo) desde el directorio /etc/apache2/ssl/

#openssl ca -in peticion.csr -out certificado.crt


Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Aug 23 12:22:56 2010 GMT
Not After : Aug 22 12:22:56 2011 GMT
Subject:
countryName = ES
stateOrProvinceName = España
organizationName = ITE
organizationalUnitName = CURSO MENTOR
commonName = Usuario
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D4:89:85:41:64:26:A5:62:19:D2:EC:68:E6:3E:55:F5:EA:C2:A2:B3
X509v3 Authority Key Identifier:
DirName:/C=ES/ST=España/L=Madrid/O=ITE/OU=CURSO MENTOR/CN=servidor.apache2.com
/emailAddress=webmaster@apache2.com
serial:EE:39:51:A1:79:B5:9A:64
Certificate is to be certified until Aug 22 12:22:56 2011 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

En el directorio /etc/apache2/ssl/ tenemos disponible el certificado certificado.crt.

4. Exportamos el certificado
Exportamos   el   certificado   y  las  claves  a  formato  PKCS#12.   El  archivo  PKCS#12  contiene  las   claves   asimétricas   (privada  y
pública) y el certificado (con la clave pública y los datos del usuario, ya firmados por la autoridad certificadora).
Ejecutar desde /etc/apache2/ssl como usuario usuario:

24 de 39
Curso Mentor Apache

$openssl pkcs12 -export -in certificado.crt -inkey /home/usuario/privada.key -out


/home/usuario/usuario.p12
Enter pass phrase for privada.key:soyusuario
Enter Export Password:soyusuario
Verifying - Enter Export Password:soyusuario

El archivo generado usuario.p12 (PKCS#12) irá protegido por una contraseña. Podemos grabarlo en un soporte e importarlo desde
un navegador, cliente de correo, etc, para ser utilizado. Debemos guardarlo bien, porque contiene nuestra clave privada. Una vez
importado en el navegador, nos conectamos a nuestro servidor que nos requerirá identificarnos con un certificado de cliente válido. Y
si no, no nos permitirá entrar.

25 de 39
Curso Mentor Apache

Windows: Servidor SSL


Configuración del servidor SSL

1. Partimos de un servidor Apache 2.2 instalado y con hosts virtuales configurados. Para activar el soporte SSL de Apache2 en
Windows XP hay que hacer lo siguiente:
2. Comprobar que el ejecutable openssl.exe está disponible en el directorio /bin de Apache2.2. Recordar que instalamos el binario
con soporte SSL.
3. Comprobar que el archivo mod_ssl.so está en el directorio  /modules de Apache2.2
4. Descomentar en el archivo de configuración httpd.conf las líneas:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

5. Añadir la directiva específica de SSL en httpd.conf

<Directory />
SSLRequireSSL
</Directory>

6.   Si  queremos  que  todos  los  módulos  de  Apache  estén   enterados  de   la   opción   SSL   hay  que   cambiar  en   el  registro   de
Windows XP la entrada siguiente (abrir una consola y ejecutar la orden regedit):

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Apache2\ImagePath

aparece:
C:\Program Files\Apache Group\Apache2\bin\Apache.exe" -k runservice

cambiar por:
C:\Program Files\Apache Group\Apache2\bin\Apache.exe" -D SSL -k runservice

7. Creación de nuestra Autoridad Certificadora, para luego expedir certificados a los clientes que quieran conectarse al servidor.

Openssl necesita un el archivo de configuración openssl.cnf en el directorio bin/. La instalación deja disponible uno pero en la


carpeta Software del curso hay disponible el openssl.cnf con el que se han hecho las pruebas. Hay que tener en cuenta que
Windows trata los archivo *.cnf de una forma especial, pero son archivos de texto.

Ir al directorio C:/Program Files/Apache Software Foundation/Apache2.2, ejecutar:

C:\Program   Files\Apache   Software   Foundation\Apache2.2\bin>openssl req -config openssl.cnf -x509


-newkey rsa:2048 -keyout cakey.pem -days 3650 -out cacert.pem

8. Creación de la clave privada de nuestro futuro certificado del servidor SSL.
Desde  una  consola  ir a C:/Program Files/Apache Software Foundation/Apache2.2/bin y ejecutar la  orden
siguiente que genera la clave privada:
openssl genrsa -out serv-privkey.pem 2048

9. Ahora vamos a crear un certificado digital con nuestra CA. Pero, antes de hacer el certificado , hay que hacer
una petición y en ella se establece el propietario del certificado. Desde \bin ejecutar:

openssl req -config openssl.cnf -new -key serv-privkey.pem  -out peticion-certificado-servidor.pem

26 de 39
Curso Mentor Apache

Utilizamos el archivo de configuración generado para crear el certificado. Para ello ejecutar desde \bin:

openssl x509 -CA cacert.pem -CAkey cakey.pem -req -in peticion-certificado-servidor.pem -days
3600 -CAcreateserial -out servidor-cert.pem

donde indicamos que el certificado es para un servidor utilizando la opción -extfile y el archivo config.txt.
Esto crea un certificado que expirará en 3600 días

Generamos el certificado para el servidor:

bin\openssl x509 -in server.crt -out server.der.crt -outform DER

Crear   la   carpeta C:\Archivos   de   programa\Apache   Group\Apache2\conf\ssl y   mover   a   ella   los   archivos


generados:cakey.pem,   cacert.pem,   peticion-certificado-servidor.pem,   servidor-cert.pem,
serv-privkey.pem, cacert.srl.
Editar el archivo httpd-ssl.conf y dejar las siguientes líneas:

Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache none
SSLMutex default
<VirtualHost _default_:443>
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs"
ServerName servidor.apache2.com:443
ServerAdmin webmaster@apache2.com
ErrorLog “C:/Archivos de programa/Apache Software Foundation /Apache2.2/logs/error.log”
TransferLog “C:/Archivos de programa/Apache Software Foundation /Apache2.2/logs/access.log”
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW :+SSLv2: +EXP:+eNULL
SSLCertificateFile   C:/Archivos   de   programa/Apache   Software   Foundation   /Apache2.2/conf/ssl
/servidor-cert.pem
SSLCertificateKeyFile C:/Archivos de programa/Apache Software Foundation /Apache2.2/conf/ssl
/serv-privkey.pem
#SSLVerifyClient require
#SSLVerifyDepth 10
</VirtualHost>

El archivo httpd-ssl.conf contiene   algún   fallo   en   nombres   de   archivos.   Por   ejemplo   el   archivo   de   error   se   llama
error.log y el de acceso access.log y no como aparecen por defecto.
También hay que tener en cuenta que el path al archivo si contiene espacios debe ir entre “”
Al reiniciar el servidor Apache2 e ir a https://servidor.apache2.com y pulsar Aceptar y veremos el mensaje contenido en el archivo
index.html de la página principal.
Y  si nos fijamos en la esquina inferior derecha veremos que nuestra página tiene el candado cerrado indicando que es una página
segura.
OJO con las comillas dobles. Hay de dos tipos: ALT-34 y las comillas tipográficas utilizadas por WORD. Estas últimas pueden dar
problemas.

27 de 39
Curso Mentor Apache

Generación de certificados clientes

En el apartado anterior generamos los siguientes archivos:

de nuestra CA: cacert-pem, cacert.srl, cakey.pem
de nuestro certificado de servidor: servidor-cert.pem y serv-privkey.pem (certificado y clave privada respectivamente)

Ahora lo que tenemos que hacer es generar certificados para los clientes y poner la directiva SSLVerifyClient con el valor “require”
(en lugar de “none” que es el valor por defecto) incluida en la sección Directory correspondiente a la zona segura.
Para ello hay que realizar las acciones siguientes:

1. Creación de una clave privada (PEM)
2. Generación de una solicitud de certificado (CSR), que en nuestro caso es autogenerado
3. Instalación del certificado (CRT)
4. Exportar el certificado

1. Generar clave privada del cliente
Generamos un Certificado para uso personal. Como usuario y desde su home (C:\Documents and Settings\usuario).
Generamos la clave privada triple-DES mediante algoritmo RSA, tamaño de la clave 2048 y archivo de salida cliente-privada.pem
en el directorio home del usuario:

openssl genrsa -out cliente-privada.pem 2048
Generating RSA private key, 2048 bit long modulus
..............++++++
e is 65537 (0x10001)

2. Petición de certificado
Hay que realizar la petición de certificado en el formato estándar PKCS#12 para que la firme la Autoridad Certificadora. La extensión
suele ser .csr (Certificate Signing Request, Petición de Firma de Certificado) y contiene la clave pública y los datos identificativos
para que los firme la CA.
En el caso de una persona, los campos identificativos serán el Common Name (CN) con el nombre y DNI de la persona (esto es una
convención utilizada, por ejemplo, por la Fábrica Nacional de Moneda y Timbre) y la dirección de correo electrónico, que servirá para
enviar correos cifrados y firmados.
El valor del campo Organization Name (Nombre de la Organización), debe coincidir con el de la Autoridad Certificadora.
Lo ejecuta el usuario:

openssl   req   -config   bin\openssl.cnf   -new   -key   cliente-privada.pem   -out   peticion-


certificado-cliente.csr

3. Firma del certificado
La Autoridad Certificadora (nuestro servidor SSL) firma el certificado cliente que habrá que distribuir para que puedan visitar el sitio
https://servidor.apache2.com.

openssl x509 -CA cacert.pem -CAkey cakey.pem -req -in peticion-certificado-cliente.csr
-set_serial 3 -days 30 -out cliente-certificado.pem

Hay que ejecutar como Administrador
Es  un certificado  del  tipo  x509  cuya  CA   está  definida en el archivo  cacert.pem  ,  utiliza como clave  privada (-CAkey) el archivo
cakey.pem y el certificado que se va a generar tiene las especificaciones definidas peticion-certificado-cliente.csr.

28 de 39
Curso Mentor Apache

El certificado tiene una validez de 30 dias y sin cifrado (cifrado SHA1 no está soportado por Win32).
También  le  decimos   que  el   certificado  tiene  el   número  3.   Este  número  debe  cambiar  para  cada  certificado  cliente,   ya  que  la
revocación openssl la hace por el número de certificado.
4. Exportamos el certificado
Exportamos   el   certificado   y  las  claves  a  formato  PKCS#12.   El  archivo  PKCS#12  contiene  las   claves   asimétricas   (privada  y
pública) y el certificado (con la clave pública y los datos del usuario, ya firmados por la autoridad certificadora) que el navegador
entiende.

Ejecutar desde /etc/apache2/ssl como usuario usuario:

$openssl   pkcs12   -export   -in   cliente-certificado.pem   -inkey   “C:\Documents   and


Settings\usuario1\cliente-privada.pem”   -certfile   cacert.pem   -out   “C:\Documents   and
Settings\usuario1\usuario1.p12”

El archivo generado usuario.p12 (PKCS#12) tiene contraseña. Podemos grabarlo en un soporte e importarlo desde un navegador,
cliente de correo, etc, para utilizarlo. Contiene nuestra clave privada.
Una  vez  importado  en  el  navegador  cuando  el  usuario1  se  conecte  al  servidor  servidor.apache2.com  vía  https,   le  pedirá  que  se
identifique con un certificado de cliente válido, de lo contrario no le permitirá acceder.

Preparación del servidor Apache2

La  configuración  de  Apache2  requiere  activar   la  directiva  que  solicita  certificado  para  clientes   y   la  localización  del   archivo  de
certificado de nuestra CA.

1. Solicitar certificado. En httpd-ssl.conf descomentar la línea
SSLVerifyClient require
SSLCertificateFile   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2
/conf/ssl/servidor-cert.pem"

2. Reiniciar el servidor Apache2 y este pedirá certificado a cada usuario que intente entrar.

SSLCertificateFile: donde está el certificado de nuestro servidor
SSLVerifyClient require: indica que el servidor debe solicitar un certificado al cliente cuando acceda a nuestro sitio web seguro.

29 de 39
Curso Mentor Apache

Mecanismos de seguridad
¿Es Apache2 un servidor web seguro?

Realmente el historial de agujeros de seguridad de Apache es muy amplio. Pero también hay que decir que el historial de creación de
parches para tapar esos agujeros es también muy amplio y, sobre todo, esos parches se han generado de una forma muy rápida.
Lógicamente la seguridad de Apache dependerá en gran parte de la configuración que se le de. Prácticamente todo es configurable en
Apache así que habrá que ir con cuidado.
Un  principio  básico  de  la  seguridad  en  general  dice  que  sólo  se  deben  tener  activos   en  el  servidor  aquellos   servicios   realmente
necesarios y si no se necesitan y no están instalados mejor aún.
Si el servicio es necesario el segundo principio es activar de dicho servicio sólo aquellas funcionalidades que se necesiten.

¿Qué funcionalidad esperamos de un servidor web?

En base a esta pregunta sólo se incluirán aquellos módulos que sean necesarios en tiempo de compilación.
Por ejemplo:

¿ Se van a servir sólo páginas web HTML estáticas?
Si decimos que si sabemos que no se va a permitir la ejecución de scripts CGI.

¿El acceso a algunas páginas web será restringido a direcciones IP seleccionadas o usuarios (autenticación básica)?
Si sólo activamos la autenticación básica no tendremos disponible el protocolo SSL.

¿Debe funcionar nuestro servidor web como proxy-cache?

El servidor deberá registrar todas las peticiones web (incluyendo información sobre navegadores web).

Sugerencias de seguridad

Proponemos algunas medidas de seguridad generales para proteger nuestro servidor web:
1. El servidor Apache2

Determinar cuáles son los módulos que necesita tener activados y desactivar el resto.

El servidor debe revelar la menor cantidad posible de información sobre sí mismo.
El  administrador  debe  ser  el  propietario  de  los   directorios   de  configuración,   de  los   archivos   ejecutables,   históricos   y   de
contenidos de Apache.
Los archivos y directorios con información global del servidor deben ser accesibles sólo para lectura por el usuario propietario
de los procesos del servidor (directiva User).
El servidor web debe ejecutarse bajo UID/GID dedicado, no uno ya utilizado por cualquier otro proceso del sistema. Además
dicho usuario, en nuestro caso www-data, no debe de disponer de login:

www-data:x:33:33:www-data:/var/www:/sbin/nologin

Controlar  los   datos   que  están  disponibles.   Cualquier  tipo  de  dato  que  requiera  un  acceso  restringido  deben  configurarse
utilizando directivas de Apache que restringen el acceso a determinadas direcciones IP o a determinados usuarios.
Los   archivos   y   directorios   que  contienen  información  general   del   servidor   incluidos   en  el   directorio  dado  en  la  directiva
DocumentRoot deberán tener permiso de lectura para el grupo que ejecuta los procesos.
Si dentro de un directorio del DocumentRoot de Apache hay un enlace simbólico a /etc, cualquier usuario de Internet puede
tener acceso al archivo /etc/password. No es recomendable el uso de la opción de Apache FollowSymLinks.

30 de 39
Curso Mentor Apache

Si los usuarios del ordenador también pueden publicar documentos en el servidor, deberán tener en sus directorios home un
directorio que coincida con el indicado en la directiva UserDir y un archivo dentro de este directorio con el nombre indicado en
la directiva DirectoryIndex. Todos los ficheros y directorios publicados deben tener permiso de lectura para el grupo indicado
en la directiva Group. Si se quiere restringir mas el acceso a la información publicada utilizar permisos 711 para el directorio
de las páginas del usuario.

Un usuario no deberá tener permiso para modificar los documentos de otro usuario o la información principal del servidor.
La  autenticación  de  usuarios   y   grupos   se  realiza  a  través   de  una  serie  de  archivos   que  deben  estar  fuera  del  árbol  de
directorios de documentos y sólo con permisos de lectura para el usuario que ejecuta apache2 en el servidor.

Permitir  el  índice  de  los   directorios   tampoco  es   una  buena  idea,   ya  que  el  intruso  tiene  información  de  la  estructura  de
directorios del servidor web. Cabe la posibilidad de que encuentre cualquier archivo que hayamos dejado sin darnos cuenta y
que tenga información comprometida. Podemos controlar este comportamiento con Option Indexes.

Mantenerse informado de las posibles vulnerabilidades detectadas en Apache2. Si tenemos una versión con una vulnerabilidad
que se soluciona en una versión posterior, actualizar la versión lo antes posible.
Seguridad por oscuridad: el servidor web deberá proporcionar la menor cantidad posible de información sobre sí mismo.

2. Directiva ServerSignature
Eliminamos información almacenada en el archivo  error.log y en  las páginas que genera  el servidor. Esta  información
normalmente contiene la dirección de correo introducida en ServerAdmin.

ServerSignature Off

3. Directiva ServerTokens
Eliminamos información innecesaria en el banner (módulos, versión, etc) que normalmente se muestra en las cabeceras
HTTP de las respuestas del servidor.
Si tenemos el valor:

ServerTokens Full

vemos la respuesta de Apache2 siguiente:

Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c Server at profesores.apache2.com Port
80

Si tenemos el valor:

ServerTokens Prod

vemos la respuesta de Apache2 siguiente:

Apache Server at profesores.apache2.com Port 80

4. Permisos ejecutable apache2
El archivo ejecutable apache2 debe pasar sus permisos de 755 (lectura y ejecución al grupo y a todos) a 700 (sólo el
root puede ejecutarlo).

# chmod 700 /usr/sbin/apache2

5. Directiva Indexes
Muestra el listado de archivos y directorios cuando se accede a un directorio que no contiene ningún archivo index.htm o
index.html.   Está   activada   por   defecto   pero   es   recomendable   desactivarla,   ya   que   los   usuarios   podrían   descargar
documentos que no les interesan para nada.

31 de 39
Curso Mentor Apache

<Directory "/var/www">
Options –Indexes
</ Directory >

6. Directiva TimeOut
Una forma de ataque a nuestro servidor web a través de Internet es tratar de consumir todos los recursos del servidor de
forma que se sobrecargue. Normalmente llamado ataque de denegación de servicio (DoS).
La directiva TimeOut indica:
a) El tiempo de espera desde que se se establece la conexión hasta recibir la señal GET, HEAD, o POST.
b) El tiempo entre paquetes TCP recibidos para una trasmisión larga de datos, como el envío de un archivo mediante un
POST o PUT.
c) El tiempo de espera para el acuse de recibo o ACK de los datos enviados.
Por defecto el valor de esta directiva es de 300 ( 5'). Es preferible mantener un valor bastante mas bajo:

Timeout 50

7. Directiva KeepAlive
KeepAlive indica si son soportadas o no las conexiones persistentes. La mayoría de navegadores utilizan el protocolo
HTTP/1.1 que permite, por ejemplo, a través de una misma conexión descargar simultáneamente todas las imágenes de
una página web evitando así la necesidad de establecer nuevamente la conexión.

KeepAlive On

8. Verificación del servidor
Nikto es una herramienta open-source que facilita la tarea de verificación del servidor web. Esta herramienta realiza un
scanner sobre los servidores web haciendo unas 3300 pruebas para comprobar la seguridad del servidor.
Podemos descargar la última versión de la web oficial http://www.cirt.net/code/nikto.shtml
Para ejecutar las pruebas:

$ ./nikto-1.36/nikto.pl -h 192.168.1.1

9. Entorno de red y servicios del sistema

El servidor web deberá protegerse mediante un cortafuegos. Las reglas deberán aceptar peticiones entrantes al puerto TCP 80
y permitir respuestas salientes. Sólo se admitirán además paquetes ICMP del tipo origen apagado, tiempo excedido o destino
inalcanzable, todos los demás paquetes deberán denegarse.

Comprobar los servicios activos en el sistema y desactivar los que realmente no hagan falta. Para comprobar los
servicios ejecutar la orden:

# lsof -i

Para desactivar servicios utilizar la herramienta sysvconf. Hay servicios que realmente no son necesarios y solemos tener
activos (LISTEN) como son telnet, ftp, rpc, nfs, etc... 

10. El Sistema Operativo

El sistema  operativo  debe  protegerse  contra  ataques remotos y locales. Es importante  mantener actualizado  el


kernel con los últimos parches de seguridad y disponer de antivirus actualizado.

32 de 39
Curso Mentor Apache

33 de 39
Curso Mentor Apache

Glosario
Glosario Unidad 7

Concepto Definición

Certificado digital Consta de una clave pública y un identificador, ambos firmados digitalmente por una Autoridad
Certificadora. Su objetivo es asociar una clave pública a un usuario determinado.

Criptoanálisis Estudio de los métodos para obtener el sentido de una información cifrada rompiendo o forzándola.

Criptografía Ciencia  para  el  cifrado de la información y que engloba el diseño de algoritmos que lleven a  cabo  dicha


función  mediante  una  transformación  matemática  que  vuelva  la  información  ilegible.   Se  puede  aplicar  a
datos, textos e imágenes.

DSA Algoritmo utilizado sólo en firma digital.

Encriptación Proceso  mediante  el   cual   la  información  es   codificada  de  tal   manera  que  no  pueda  ser   interpretada
fácilmente.   Es   una  medida  de  seguridad  utilizada  para  que  al   transmitir   la  información  no  pueda  ser
interceptada por intrusos. Opcionalmente puede existir además un proceso de desencriptación a través del
cuál la información puede ser interpretada una vez que llega a su lugar de origen.

Firma digital La firma digital es una porción código que se adjunta a un mensaje y que garantiza al destinatario quién es
el remitente del mensaje, y qué la información del mensaje no ha sido alterada. Se utiliza en un entorno de
clave pública y su objetivo es garantizar la integridad del mensaje y la identidad del firmante.

Hash Hash  o  función  resumen  hace  referencia  a  un  método  para  generar  claves   que  representan  de  manera
unívoca a un documento, registro, archivo, etc. Un hash hace una conversión de los datos de cualquier
tamaño a un número de longitud fija y además, no es reversible.

MD5 Algoritmo de Resumen del Mensaje 5. Es un algoritmo de reducción criptográfico que genera un hash de
128 bits.

RSA Sistema criptográfico de clave pública. Se utiliza en la firma digital y en el intercambio de claves.

SHA-1 Secure Hash Algorithm. Es un algoritmo de reducción criptográfico que genera un hash de 160 bits. Muy
utilizado en las firmas electrónicas.

Socket Elemento de programación que permite a dos máquinas comunicarse a través de una red, mediante el uso
de la IP  de origen, la IP  de destino y el número de puerto. Se crea un socket cuando hay una conexión
entre el cliente y el servidor.

X.509 Es   un   estándar   de   certificados   para   firmar   documentos   y   garantizar   la   seguridad   y   fiabilidad   en   las
comunicaciones. El X.509 está definido por la RFC3280 del IETF.

34 de 39
Curso Mentor Apache

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

35 de 39
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Página oficial de apache: http://www.apache2.es/2.2.2/

36 de 39
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 7 'Seguridad'

Los puntos a destacar de esta unidad son los siguientes:

1. La criptografía asimétrica funciona bien para la autenticación, ya que cada usuario protege su clave secreta, pero es lenta para
el cifrado. La criptografía simétrica es rápida en el cifrado y mala para la gestión de claves.
2. La criptografía asimétrica garantiza la Confidencialidad y la Autenticidad.
3. La firma digital garantiza la Integridad del mensaje y la identidad del firmante.
4. SSL permite establecer, de forma sencilla, conexiones seguras a través de Internet ya que todos los datos que se transfieren
entre el navegador web (cliente) y el servidor van cifrados.
5. El objetivo del certificado digital es asociar una clave pública a un usuario determinado.
6. El objetivo de la autoridad certificadora es acreditar la correspondencia entre una clave y su propietario real.
7. Un principio básico de la seguridad en general dice que sólo se deben tener activos en el servidor aquellos servicios realmente
necesarios y si no se necesitan y no están instalados mejor aún.

37 de 39
Curso Mentor Apache

Autoevaluación Unidad 7
Autoevaluación

El cuestionario de autoevaluación de la Unidad 7 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

38 de 39
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 7

39 de 39
Curso Mentor Apache

Apache
Unidad 8: Registro y Monitorización de Apache2

 
En este capítulo aprenderás:

el concepto de registro
las técnicas de rotación de los archivos de registro
el concepto de analizador de logs
la instalación, configuración y utilización del analizador de logs Webalizer
la instalación, configuración y utilización del analizador de logs Awstats
la instalación, configuración y utilización del analizador de logs BBClone
el concepto de rendimiento del sistema
la utilización de la herramienta ab para evaluar el rendimiento del sistema

Material complementario:

1. Archivo con las actividades referidas a lo largo del capítulo. Archivo  U8_Actividades.pdf

2. Mapa conceptual del capítulo. Archivo U8_Mapaconceptual.png

3. Glosario completo del curso. Archivo glosario.pdf

1 de 35
Curso Mentor Apache

Introducción
Objetivos

Identificar  el  registro  de  Apache2  como  sistema  de  almacenamiento  de


información relativa a los accesos y las situaciones de error.

Conocer las directivas asociadas al registro.

Conocer el proceso de rotación de archivos de registro que consiste en,
periodicamente, salvar el archivo actual bajo otro nombre y crear uno nuevo vacío

Trabajar con herramientas que proporcionan estadísticas de uso del servidor web Apache2.

Estudiar mecanismos que mejoren el rendimiento del servidor web.

Conocimientos previos

En esta unidad abordamos la monitorización de Apache2 y la utilización de diferentes herramientas para ello. Como unidad dentro
de la fase final del estudio de Apache es importante haber asimilado y practicado los conceptos de las unidades anteriores.

Contenidos

Unidad 8: Registro y Monitorización de Apache2
A. General

1. Registro de Apache2
2. Rotación de archivos de registro: logrotate

B. Ubuntu

1. Analizador de logs: Webalizer


2. Analizador de logs: Awstats

C. Windows

1. Analizador de Logs: Bbclone

D. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 35
Curso Mentor Apache

Registro de Apache2
Registro

La instalación de Apache2 por defecto deja activados sus mecanismos de registro de actividad en general del servidor web.
Haciendo uso de un conjunto de directivas almacena información relativa a:
errores producidos al ejecutar el proceso apache2 -> Registro de error
accesos al servidor -> Registro de actividad
En  el  primer  caso,   los   errores,   prácticamente  no  se  puede  configurar.   Estos   registros   de  error  vienen  con  un  formato
determinado,   sin  embargo  los  registros  de  actividad  tienen  un  formato  altamente  configurable.   Es  decir,   el  administrador
puede decidir qué información quiere registrar y, por lo tanto, decidir el formato del registro.
Estos archivos crecen en función del volumen de accesos que soporte el servidor web.
Definimos   el  Registro   de  Apache2  como  el  sistema  de  almacenamiento  de  información  relativa  a  los   accesos   y   las
situaciones de error .

Directivas de registro

Las directivas asociadas al registro son las siguientes:

Directiva Descripción

CustomLog Establece el nombre del archivo (path absoluto o relativo a ServerRoot) y formato del archivo de
accesos al servidor.
CustomLog logs/access.log common

ErrorLog Contiene  la  ruta  absoluta  o  relativa  al  path  de  Apache2  (ServerRoot)  del  archivo  de  registro  de
errores. Registra lo que sucede con Apache: errores y accesos de clientes.
Si se tienen varios hosts virtuales cada uno de ellos puede incluir su propia directiva ErrorLog y el
registro de errores se hace en archivos independientes. Si no se indica de esta forma los mensajes
de error de todos hosts virtuales se almacenarán en el mismo archivo.
ErrorLog /var/log/apache2/error.log

LogLevel Controla la gravedad y número de mensajes que se guardan en archivo de registro de errores. Existen
ocho niveles. Por defecto:
LogLevel warn

LogFormat Establece el formato de las líneas del archivo de log. Permite personalización por parte del usuario.
LogFormat "%h %l %u %t \"%r\" %>s %b" common

La  directiva  CustomLog   puede  llevar  explícitamente  una  cadena  con  los   diferentes   símbolos   disponibles   de  LogFormat.   Por
ejemplo, si indicamos:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

podemos sustituir ambas por la equivalente:

CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"

3 de 35
Curso Mentor Apache

en la que se da, en vez del alias common la propia cadena.

Niveles de ejecución

Los diferentes niveles de registro disponibles desde LogLevel son los dados en la tabla siguiente. Están ordenados de menor a
mayor información almacenada.

Nivel Descripción Ejemplo

"Un proceso hijo no puede abrir el fichero de lock (lock file). El programa va
emerg Emergencias. No se puede utilizar el servidor
a terminar"

alert Requiere acción inmediata "getpwuid: no pudo determinar el nombre de usuario a partir del uid"

crit Condiciones críticas "socket: No se encontró un socket adecuado, el proceso hijo va a terminar"

error Condiciones de error "Final prematuro de la cabecera del script""

warn Condiciones de advertencia "el proceso hijo 1234 no ha terminado, enviando otra vez SIGHUP"

"httpd:   interceptada   señal   SIGBUS,   intentando   hacer   un   volcado   de


notice Condición normal, pero significativa
memoria en ..."

"El   servidor   parece   estar   ocupado,   (puede   que   necesite   incrementar


info Información
StartServers, o Min/MaxSpareServers)..."

debug Mensajes de nivel debug "Abriendo el fichero de configuración ..."

Cuando se especifica un determinado nivel, se escriben en el log también los mensajes de todos los demás niveles por encima.
El nivel asignado por defecto es warn. Por lo tanto, todos los mensajes de todos los niveles de warm hacia arriba también se
almacenan.
Algunos de los símbolos de formato disponibles desde LogFormat son los dados en la tabla siguiente:

Nivel Descripción

%a Dirección IP del cliente web

%b Número de bytes enviados al cliente web.

%h Nombre del host del cliente web.

%p Número de puerto en el que se ha recibido la solicitud

%t Fecha y hora local

%T Segundos usados para hacer la transmisión .

%u Si el acceso requiere autenticación indica el nombre del usuario.

%U Dirección URL solicitada por el cliente web.

%v Nombre del host virtual y dominio del servidor según nomenclatura DNS.

Si  se   necesita   obtener  un   mayor  nivel  de   detalle   se   puede   utilizar  el  formato   combinado   (combined)  en   lugar  del
común   (common).   Este   formato   permite   incluir,   además   de   los   símbolos   anteriores,   información   relativa   a   la   URL

4 de 35
Curso Mentor Apache

solicitada   por  el  cliente   (%U  o   %{Referer}i\)  y   el  nombre   y   versión   del  buscador  o   cliente   utilizado   para   acceder
(%{user-agent}i\).
En  general  suele  ser  de  interés  utilizar  el  formato  combinado,   sobre  todo  pensando  en  los  analizadores  de  logs  que  utilizan  la
información adicional en sus estadísticas.

LogFormat   "%v   %h   %l   %u   %t   \"%r\"   %>s   %b   \"%{Referer}i\"   \"%{User-Agent}i\""


combined

Reflexión

¿Qué nivel se debe indicar en LogLevel para obtener el máximo de información acerca del acceso? ¿Qué
problema puede presentar?

5 de 35
Curso Mentor Apache

Rotación de archivos de registro


Introducción

El proceso de rotación de archivos de registro consiste en (semanalmente por defecto) salvar el archivo actual bajo otro nombre y
crear uno nuevo vacío. De esta forma, sin renunciar a disponer de todos los sucesos del sistema, se puede trabajar con archivos
de menor tamaño.
Logrotate es una utilidad (instalada por defecto en el sistema) que lleva acabo la rotación automática, comprensión, extracción y
envío de los archivos de logs.
Su objetivo  es facilitar la administración del sistema en general,  ya que  se  generan  en  él gran  número  de  archivos de registro.
Logrotate permite manipular cada archivo de registro de forma diaria, semanal, mensual, o cuando se haga demasiado grande.

Logrotate

Logrotate se ejecuta como un tarea diaria del cron y toma las opciones del archivo de configuración /etc/logrotate.conf
cuyo contenido se incluye:

# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}

/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}

La  configuración  anterior  indica  que  Logrotate  rota  los   archivos   semanalmente,   los   rota  4  veces   antes   de  borrarlos,   puede
comprimir  los   archivos   de  la  semana  y   crea  un  archivo  nuevo  por  cada  archivo  que  rota.   Luego  incluye  las   configuraciones
específicas de cada servicio dadas en /etc/logrotate.d/ y, por último incluye tratamientos específicos a los archivos de logs
incluidos (/var/log/wtmp)
En el directorio /etc/logrotate.d/ se encuentra el archivo de configuración específico de Apache2.

6 de 35
Curso Mentor Apache

/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}

Todas las opciones disponible se pueden consultar en la página de manual de Logrotate.
Los archivos obtenidos de la rotación se llaman access.log.1 y error.log.1.

7 de 35
Curso Mentor Apache

Ubuntu: analizador de logs


Introducción

Un servidor web debe disponer de estadísticas de uso para poder conocer qué páginas son mas frecuentemente servidas y cuáles
menos.
Desde Ubuntu vamos a estudiar el analizador de accesos de Apache: webalizer
Al ser una herramienta web es independiente del sistema operativo y, por tanto sirve igual para Windows.

8 de 35
Curso Mentor Apache

Webalizer
Instalación

Webalizer es una aplicación de análisis de logs de servidores web. Es decir, permite obtener estadísticas de acceso a un servidor
web, indicando cuáles son las páginas más visitadas, etc.
Estas estadísticas las muestra como gráficas que son accesibles vía web. Genera, por tanto, informes en formato html.
Webalizer se puede descargar de ftp://ftp.mrunix.net/pub/webalizer/ y se distribuye bajo licencia GNU GPL.
Desde Ubuntu instalamos el paquete .deb webalizer:

# apt-get install webalizer

En  el  proceso  de  instalación-configuración  nos   dice  que  la  versión  instalada  es   la  2.01  y   dónde  se  almacenarán  los   informes
generados (/var/www/webalizer).

La sintaxis de utilización es:

webalizer [opciones] <archivo_log>

donde <archivo_log> es el path del archivo de logs de cuya información se quiere obtener el informe. Si no se especifica se


toma el archivo por defecto dado en el archivo de configuración de webalizer, que es /etc/webalizer/webalizer.conf.

La herramienta dispone de gran cantidad de opciones que se pueden consultar con la orden man.
En  general no  es necesario  modificar el archivo  de  configuración /etc/webalizer/webalizer.conf. Si queremos
modificar los parámetros configurados en la instalación de webalizer y adecuarlas a nuestro sistema lo haremos con
las directivas:

LogFile /var/log/apache2/access.log
OutputDir /var/www/webalizer
ReporTitle Informe estadísticas servidor web

Estadísticas de acceso con webalizer

Para generar el informe hay que ejecutar como root:

# webalizer
Webalizer V2.01-10 (Linux 2.6.20-16-generic) locale: es_ES.UTF-8
Utilizando histórico /var/log/apache2/access.log (clf)
Using default GeoIP database
Creando informe en /var/www/webalizer
El nombre de máquina en el informe es 'elvira-edubuntu'
No encuentro el archivo histórico...
Aviso: Cortando campo de enlace origen demasiado grande
Generando informe de August 2007
Generando informe resumido
Guardando información de archivo...

9 de 35
Curso Mentor Apache

9139 registros (2 ignorados) en 23,00 segundos, 397/sec

Si ahora vamos al navegador web e introducimos la URL: http://servidor.apache2.com/webalizer/ veremos una gráfica del estilo
siguiente:

En la imagen diferenciamos entre el informe resumido de los últimos doce meses (tabla superior) y el detalle para cada uno de los
meses que es una tabla que contiene totales para la fecha de generación del documento.
Los campos que aparecen en las estadísticas se interpretan de la forma siguiente:

Accesos (hit): se define como el número de peticiones de archivos que se realizan al servidor durante un período de tiempo
dado. Se confunde con visitas, pero no son lo mismo. Un hit es un acceso, una petición al servidor de un archivo. Ejemplo:
si en la página además del archivo html se utiliza un archivo externo javascript, otro css, y, además, la cabecera y 1 imagen
pequeña,   en  total  tenemos  5  accesos,   cinco  peticiones  de  archivos.   El  número  de  Accesos  siempre  será  mayor  que  el
número de visitas.

Archivos: es el número total de peticiones (Accesos) que devuelven 'algo' al usuario. No es lo mismo que Acceso ya que
no siempre se enviará algo a la petición. En ocasiones el resultado ya está en la caché o se produce algún error, con lo que
no hay retorno.
Visita: cuando un usuario entra en la página se produce una visita. Todo el tiempo que navegue por la web contará como
esa visita, sólo una. La primera petición que realiza ese cliente remoto es lo que cuenta como visita, luego puede estar el
tiempo que quiera descargando algo, leyendo contenidos, todo eso formará parte de la misma visita.
Clientes: número de visitas que no se repiten. No se contabilizan los usuarios que vuelven a lo largo del tiempo. Este es
uno de los valores más fiables, para conocer el número de visitas ya que tenderá a ser menor del número real y no nos
muestra las estadísticas web infladas.
Total   de  Kbytes:   cantidad  total  de  datos  que  transfirió  el  servidor  a  los  clientes.   Es  útil  para  llevar  un  control  sobre  la
transferencia máxima mensual que nos proporciona nuestro servicio de hosting.
Páginas Vistas: cualquier tipo de archivo HTML, o cualquiera que genere HTML. No se incluyen los otros archivos incluidos
en el documento, como imágenes, audio, flash, etc.
Página de Entrada: páginas a través de las que el usuario accede a nuestro servidor. No siempre se accede a nuestra
página principal.
Página de Salida: última página web visitada por el usuario.
Referidos: sitios a través de los que se accede a nuestra página, ya sean buscadores u otras páginas que nos enlacen.

10 de 35
Curso Mentor Apache

Cadenas de Búsqueda: palabra o palabras clave que se usan en los buscadores para llegar a nuestra página web o sitio
web.

Si accedemos a un mes concreto nos devuelve una información mas completa de la actividad de Apache2.

Pero esta no es la forma 'normal' de generar los informes.
Al   instalar   webalizer   se   incluye,   por   defecto,   el   script   que   lanza   la   ejecución   programada   diariamente   en   el   directorio
/etc/cron.daily/. Este script el servidor lo ejecuta diariamente a la hora indicada en el archivo /etc/crontab, y
genera el informe diario correspondiente.
El usuario root puede en cualquier momento ejecutar dicho script y obtener un informe con las últimas estadísticas de
la forma siguiente:

# /etc/cron.daily/webalizer

que   analiza   los   logs   que   tenga   nuestro   servidor   web   y   deja   accesible   el   resultado   en   la   carpeta   webalizer   del   servidor:
http://servidor.apache2.com/webalizer/

11 de 35
Curso Mentor Apache

Configuración
Archivo de configuración /etc/webalizer.conf

Las directivas más importantes del archivo de configuración son:

Directivas Descripción

LogFile Ruta al archivo que almacena los accesos registrados por el servidor web.
LogFile /var/log/apache2/access.log

OutputDir Ruta  del  directorio  donde  se  ubicará  el  informe  generado.   Es  importante  que
quede bajo el directorio del servidor web /var/www/webalizer
OutputDir /var/www/webalizer

ReportTitle Título que aparecerá en el informe:
ReportTitle Estadísticas Servidor Web

HostName Nombre del servidor web
HostName servidor

PageType En este parámetro, que puede tener varias entradas, se especifica qué tipo de
páginas  se  quiere  procesar.   Suelen  ser  páginas  con  extensión  htm*,   cgi  (por
ejemplo   consulta   a   motores   de   búsqueda),   páginas   dinámicas   con   php*   y
archivos de perl .pl:
PageType htm*
PageType cgi
PageType phtml
PageType php*
PageType pl

Quiet / ReallyQuiet Suprimen  los   mensajes   de  error  que  puedan  presentarse.   Es   recomendable
asignarlos como yes para procesar los logs del servidor.
Quiet yes
ReallyQuiet yes

TopEntry si se pone el valor 100, mostrará las 100 páginas de inicio de sesión más
consultadas.

TopExit si se pone el valor 100, mostrará las 100 páginas de salida de sesión más
comunes.

12 de 35
Curso Mentor Apache

Awstats
Introducción

Desde Ubuntu vamos a estudiar el analizador de accesos de Apache Awstats (Advanced Web Statistics) cuya página oficial es
http://www.awstats.org/. Es más completo que webalizer.
En   la   dirección   http://awstats.sourceforge.net/docs/awstats_compare.html   hay   disponible   una   comparativa   entre   diferentes
analizadores de logs, entre ellos están incluidos awstats y webalizer.
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 y el catalán.
es más lento que otros analizadores de logs.

Su funcionamiento se basa en:

la   lectura   de   unos   archivos   de   entrada   (en   este   caso   serán   los   archivos   access.log   de  Apache2),   que  son
generados por Apache2.
A partir de los archivos de entrada Awstats genera sus propios archivos con las estadísticas. Esta generación se hace de
forma periódica con un cron.
Cuando se hace una llamada para que se muestren en un Navegador las estadísticas, Awstats lee los archivos que él ha
generado y muestra los resultados como HTML estático.

Instalación de Awstats

La instalación en Ubuntu es:

# apt-get install awstats

Comprobamos que instala la versión 6.9.5. Los archivos y directorios que instala/crea son los siguientes:

Archivos/Directorios Descripción

/usr/share/doc/awstats/ Directorio donde se guardan archivos de ejemplo y ayuda.

/usr/share/awstats/lang/awstats- Archivo de idioma castellano. Es un simple archivo de texto.
es.txt

/usr/share/awstats/plugins/ Directorio  en  el  que  se  instalan  los   plugins   que  vienen  por  defecto  con  el
paquete.

/usr/share/awstats/icon/ Directorio donde se instalan los iconos que se van a utilizar para mostrar las
estadísticas.

/usr/lib/cgi-bin/awstats.pl Archivo  que  va  a  generar  las  estadísticas  a  partir  de  los  logs  del  sistema.
Escrito en Perl.

/etc/cron.d/awstats Entrada de cron para actualizar las estadísticas periódicamente.

13 de 35
Curso Mentor Apache

Archivos/Directorios Descripción

/etc/awstats/awstats.conf Archivo de configuración de Awstats.
/etc/awstats/awstats.conf.local Archivo que contiene las configuraciones específicas y que se incluye
en el anterior.

14 de 35
Curso Mentor Apache

Configuración
Configuración de Awstats y funcionamiento

El archivo de configuración general de awstats es /etc/awstats/awstats.conf.

Conviene incluir nuestras modificaciones en el archivo  /etc/awstats/awstats.conf que serán añadidas al anterior archivo
mediante un Include y que no se verán afectadas por las posibles actualizaciones de la herramienta.
Es   importante   comprobar   que   se   tiene  activado   el   módulo   cgid   ya   que   es   necesario   para   el   funcionamiento   de   Awstats.
Comprobarlo.

Tipo de logs

Hay que asegurarse de que el servidor Apache2 'logea' los accesos de manera combinada (NCSA combined/XLF/ELF). Para ello
hay que asegurarse de que el archivo de configuración de cada sitio de Apache2 tiene la siguiente directiva:
CustomLog /var/log/apache2/access.log combined

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:

192.168.0.103   -   -   [21/Jun/2011:18:56:53   +0200]   "GET   /   HTTP/1.1"   200   484   "-"


"Moz
illa/5.0 (X11; U; Linux i686; es-CL; rv:1.9.2.16) Gecko/20110323 Ubuntu/10.10
(m
averick) Firefox/3.6.16"

que se corresponde con una entrada del archivo /var/log/apache2/access.log.
Ahora le indicamos a Awstats el formato en que están los logs mediante la directiva LogFormat:

Valor Descripción

1 Apache2 'logea' los accesos de manera combinada (NCSA


combined/XLF/ELF log format)

2 Formato de log de IIS (W3C log format)

3 Formato de log nativo Webstar

4 Formato de log nativo de Apache o Squid (NCSA common log format).


Con LogFormat=4 algunos navegadores o sistemas operativos no
pueden trabajar.

5 Formato de log nativo de ISA server.

6 Formato de log combinado de Lotus Notes

Comprobar las siguientes líneas en /etc/awstats/awstats.conf:
LogFormat=1
LogFile="/var/log/apache2/access.log"

15 de 35
Curso Mentor Apache

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.

DirLang="/usr/share/awstats/lang"

Para que el idioma por defecto sea el castellano, tenemos que sustituir el valor de la directiva Lang 'en' por 'es'. Es posible que
aparezca 'auto' indicando que se toma el idioma por defecto del navegador.

Lang="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.
Si queremos modificar los idiomas que aparecen, su orden, etc. utilizamos la directiva ShowFlagLinks, con los identificativos de
los idiomas que queremos que aparezcan, separados por un espacio. Por ejemplo:

ShowFlagLinks="es es_cat en"

Las imágenes correspondientes a los idiomas tienen que ser almacenadas con uid y gid root con las demás imágenes.

# ls -l /usr/share/awstats/icon/flags/
-rw-r--r-- 1 root root 229 2002-10-29 19:55 es_cat.png
-rw-r--r-- 1 root root 231 2001-06-28 00:25 es.png

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.
Por tanto si ponemos:

DirIcons="/usr/share/awstats/icon/"

sería   incorrecto   ya   que   estaría   intentando   acceder   a 'http://servidor.apache2.com/usr/share/awstats


/icon/nombre_icon.png'
La solución consiste en utilizar 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/.

Alias /awstats-icon/ /usr/share/awstats/icon/

y, entonces en la directiva DirIcons escribimos el nombre del alias creado:

DirIcons="/awstats-icon

16 de 35
Curso Mentor Apache

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 /usr/lib/cgi-bin/awstats.pl es:

#!/usr/bin/perl

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 este caso es recomendable generar logs independientes, es decir, uno para cada dominio. En nuestro caso:

SiteDomain="servidor.apache2.com"

Formato del informe

Indicamos con la directiva LogType el tipo de archivo que contendrá el informe generado:

LogType=W

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.

Visualización del informe

Para visualizar la página web generada ir a http://servidor.apache2.com/cgi-bin/awstats.pl. Si no se ve la página generada por


awstats o muestra algún error, hay que revisar de nuevo la configuración.

17 de 35
Curso Mentor Apache

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:

# ls -l /var/lib/awstats/
-rw-r--r-- 1 root root 6445 2007-08-13 20:08 awstats082007.txt

Para generar estos archivos por primera vez o actualizarlos manualmente, ejecutamos el archivo awstats.pl con los siguientes
parámetros:

#/usr/lib/cgi-bin/awstats.pl -config=servidor -update


Create/Update database for config "/etc/awstats/awstats.conf" by AWStats
version 6.95 (build 1.943)
From data in log file "/var/log/apache2/access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 119
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 119 new qualified records.

Volver a ir al navegador y comprobar que cambian las estadísticas y aparecen ya datos.

18 de 35
Curso Mentor Apache

La versión de este paquete de Awstats instala una entrada en el demonio de cron (cron.d).

#ls -l /etc/cron.d
-rw-r--r-- 1 root root 200 2005-11-09 17:53 awstats

Y si vemos el contenido del archivo:

#cat /etc/cron.d/awstats
10   03   *   *   *   www-data   [   -x   /usr/share/awstats/tools/buildstatic.sh   ]   &&
/usr/share/awstats/tools/buildstatic.sh

El archivo de cron nos dice que el usuario www-data actualiza el awstats.pl cada 10 minutos.

Por norma general se recomienda configurar el cron para que actualice las estadísticas en horas de menor carga (por la noche), ya
que el archivo access.log puede ser grande y podría bajar el rendimiento del servidor.

La ejecución de la orden del cron presenta un problema y es que los permisos del archivo de logs access.log (640) no permiten
que el usuario www-data lo lea.
#ls -l /var/log/apache2/access.log
-rw-r----- 1 root adm 58945 2011-06-23 18:55 /var/log/apache2/access.log

Una posible solución sería cambiar el grupo del archivo /var/log/apache2/access.log  a www-data, que es el usuario que


ejecuta el cron. Entonces el archivo de logs queda así:

#ls -l /var/log/apache2/access.log
-rw-r----- 1 root www-data 58945 2011-06-23 18:55 /var/log/apache2/access.log

Pero este cambio es necesario que se realice sobre los archivos nuevos de log que se van a ir generando según pasa el tiempo y
vamos almacenando más información.
Para   que,   a   partir   de   ahora,   todos   los   archivos   generados   pertenezcan   al   grupo   www-data   modificamos   el   archivo
/etc/logrotate.d/apache2:

#vi /etc/logrotate.d/apache2
/var/log/apache2/*.log {

19 de 35
Curso Mentor Apache

weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root www-data
sharedscripts
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi

Otras opciones de configuración de awstats

1. Direcciones de host que serán ignoradas en la estadística

SkipHosts="127.0.0.1"

2. Especificar el directorio dónde se almacena la base de datos de los resultados del análisis

DirData="/var/lib/awstats"

3. Crear DirData si no existe, de otro modo devuelve un error

CreateDirDataIfNotExists=1

4. Establece la página predeterminada

DefaultFile="index.php"

6. Tiene en cuenta los parámetros de llamada a las páginas dinámicas PHP

URLWithQuery=1

20 de 35
Curso Mentor Apache

Windows: analizador de logs


Introducción a Bbclone

Desde Windows vamos a estudiar la aplicación BBClone como analizador de accesos a Apache2.
BBClone detalla para cada visitante su dirección IP, sistema operativo, navegador, desde que URL han accedido a su sitio web
utilizando una interfaz gráfica. Es, además, software libre con licencia GNU General Public License.
BBClone  trabaja  actualizando  en  el   servidor  Apache  un  archivo  de  estadísticas   cada  vez   que  ofrece  una  página  web  a  un
navegador.   Para  ello  hay  que  incluir  alguna  líneas  de  código  en  las  páginas  web  que  queremos  que  BBClone  contabilice.   Esta
porción código será ejecutado por el servidor web justo antes de servir la página, y de esa forma se actualiza la estadística.
Para la obtención de las estadísticas utiliza scripts PHP. Por lo tanto requiere la instalación de PHP5 en nuestro sistema.
Permite consultar todo tipo de gráficas, ver las páginas a través de las que llegaron los usuarios, y las palabras
clave más usadas en los buscadores para llegar al sitio web.

21 de 35
Curso Mentor Apache

Bbclone
Descarga

De la página http://bbclone.de/download.php podemos descargar el paquete *.zip válido para Windows.

Instalación de PHP 5.2.4

Los pasos a seguir son los siguientes:
1. Iniciar la sesión en Windows como Administrador.
2.   Descargar  el  paquete   de   PHP   5.2.4   (php-5.2.4-Win32)  desde   www.php.net   http://windows.php.net/download/   Es
importante tener cuidado de NO BAJAR el instalador ya que no hace completamente bien la instalación para Apache
como servidor web, al menos y de momento en esta versión.
3. Extraemos el archivo zip en una carpeta con un nombre como C:\PHP.

Configuración:
1.   Ir   a   C:\PHP   y   seleccionar   todos   los   archivos   del   tipo   dll   (librerías   dinámicas).   Ahora   hay   que   copiarlos   en
C:\WINDOWS\system32.
2. Editar el archivo C:\Program Files\Apache Software Foundation\Apache2.2 \conf\httpd.conf y descomentamos la
línea que carga el módulo correspondiente a PHP5:

LoadModule php5_module "C:/PHP/php5apache2_2.dll"

3. Ahora dentro de la sección <IfModule mime_module> añadir la línea siguiente:

<IfModule mime_module>
....................................
AddType application/x-httpd-php .php
.................................................

Con esta línea estamos diciendo que se interpreten los archivos con extensión .php (tipos mime).
4.   El  archivo   de   configuración   de   PHP   se   llama   php.ini.   Al  instalar  por  defecto   se   crea   uno   llamado   php.ini-dist.
Cambiar el nombre a php.ini dejándolo en el directorio donde está inicialmente.
5. En  el archivo  de  configuración  de  Apache  httpd.conf hemos de  indicar donde  debe  buscar este  archivo  php.ini.
Añadir la siguiente línea, por ejemplo, después de la linea de LoadModule.

PHPIniDir “C:/PHP”

6.   Al  acceder  a  nuestro  servidor  siempre  se  muestra  el  archivo  indicado  en  la  directiva  DirectoryIndex.   La  modificamos  para
siempre cargue un archivo index.php que nosotros preparamos. La directiva debe quedar así:

DirectoryIndex index.php index.html

Sino existe un archivo index.php buscará el siguiente de la lista (index.html).
7.   Creamos   un  archivo  index.php   en  C:\Program   Files \Apache  Software  Foundation\Apache2.2\htdocs  con  el   código
siguiente:

<?php phpinfo(); ?>

22 de 35
Curso Mentor Apache

8. Guardar los cambios del archivo  httpd.conf y reiniciar el servidor Apache2. Si aparece  la  siguiente  información  es


que PHP ha sido bien instalado y está funcionando enlazado con Apache2.
9. Editar el archivo index.php y cambiar el código por este otro que dejamos como definitivo:

<p>Esta página ha sido creada a las <b>
<?php echo date("h:i:s a", time()); ?>
</b> en un ordenador con PHP5 funcionando.</p>
<html><body><h1>Servidor web</h1></body></html>

Volver otra vez a probar en el navegador.

Instalación de BBClone

1. Una vez descargado el paquete .zip descomprimirlo en una carpeta temporal.
2. Ir a la carpeta donde se ha descomprimido el paquete, que normalmente se llamará bbclone.
3.   Ir   al   directorio   donde   están   ubicadas   la   páginas   web   del   servidor   C:\Program   Files\Apache   Software
Foundation\Apache2.2\htdocs y crear una carpeta bbclone en la que copiamos todos los archivos de la aplicación que
se han descomprimido excepto la carpeta install (si existe, ya que sólo se necesita para la instalación automática). Es
importante copiar todo manteniendo los mismos nombres de archivos y directorios y con la misma estructura.
4. Al subdirectorio 'var' y a todos los archivos que contiene hay que darles permisos de lectura y escritura para todos
los   usuarios.   Para   ello:   ir  al  directorio   var  y   seleccionar  todos   los   archivos.   Ahora   botón   derecho   Propiedades   ->
Seguridad.
Seleccionar Usuarios e ir a Opciones Avanzadas.
Esto hay que hacerlo tanto al directorio como a todos los archivos que contiene: permisos completos para todos (equivalente a 777
en directorios y a 666 en archivos en GNU/Linux).
5. Ahora hemos de indicar de qué páginas queremos hacer estadísticas. En principio y como prueba sólo obtendremos
estadísticas de la página de inicio.
La porción de código a incluir en index.php es el siguiente:

<?php
DEFINE   ("_BBCLONE_DIR",   "C:/Program   Files/Apache   Software   Foundation/Apache2.2/htdocs
/bbclone/");
DEFINE ("_NEW_COUNTER", _BBCLONE_DIR . "mark_page.php");
if(file_exists(_NEW_COUNTER))
{
include (_NEW_COUNTER);
}
?>

Importante: no olvidar la '/' final en el path de DEFINE.
Si las páginas están escritas en PHP este código se puede añadir el principio de la parte de código php sin poner las
marcas de inicio y final de código php <?php ?>). Si las páginas son html, entonces hemos de añadir el código tal cual.
Además, para que funcione hemos cambiar la extensión de la página web a .php.
6. Comprobamos que está bien instalado BBClone y que ya ha realizado sus primeras estadísticas de la página de
inicio. Para ello ir a https://servidor.apache2.com/bbclone/show_global.php.
7. En el caso de querer obtener estadísticas de varias páginas podemos darles nombres a cada una de ellas para que
en las estadísticas se vean reflejados.
En el código php que incluimos en cada página de la que queremos estadísticas habrá que añadir después del último
DEFINE:

23 de 35
Curso Mentor Apache

<?php
DEFINE   ("_BBCLONE_DIR",   "C:/Program   Files/Apache   Software   Foundation/Apache2.2/htdocs
/bbclone/");
DEFINE ("_NEW_COUNTER", _BBCLONE_DIR . "mark_page.php");
DEFINE ("_BBC_PAGE_NAME","Página Profesores");
if(file_exists(_NEW_COUNTER))
{
include (_NEW_COUNTER);
}
?

Configuración por defecto

Antes de manipular la configuración por defecto vamos a interpretarla y luego adaptaremos los parámetros que
necesitemos.
El  archivo  que  hay  que  editar  es  config.php  (C:\Program  Files \Apache Software Foundation\Apache2.2\htdocs\bbclone
\conf).
Editar con WordPad.
Las principales opciones son:
$BBC_MAINSITE: dirección del sitio web. Sirve para que tengas un enlace a ella en la barra de navegación de las páginas de
estadísticas. Si no ponemos nada, el enlace no aparecerá.
$BBC_SHOW_CONFIG: indica si el enlace a la página para ver la configuración de BBClone aparecerá en la barra de navegación de
las páginas de estadísticas. Si ponemos 1 aparecerá y si ponemos 0 no aparecerá.
$BBC_TITLEBAR: título que aparecerá en la página de estadísticas. Puedes usar %SERVER para que ponga directamente el
nombre del servidor y %DATE para que aparezca la fecha actual. Yo pondría "Estadísticas para (Nombre del sitio web) generadas
el %DATE".
BBC_LANGUAGE: lenguaje en que queremos que aparezca por defecto la página de estadísticas. Ponemos "es" para que aparezca
en castellano.
BBC_IGNOREIP: esta opción, indicando la IP con la que normalmente el administrador accede a sus páginas web para probarlas,
hace que esos accesos no se contabilicen en las estadísticas.
La personalización que vamos a hacer en la configuración es la siguiente:

$BBC_MAINSITE = "http://servidor.apache2.com/";
$BBC_SHOW_CONFIG = 1;
$BBC_TITLEBAR = "Estadísticas de %SERVER generadas el %DATE";
$BBC_LANGUAGE = "es";

Ir a https://servidor.apache2.com/bbclone/show_global.php
Desde la pantalla mostrada se puede acceder a la configuración y comprobar los valores asignados a las diferentes
variables de config.php.
Es  importante  remarcar  que  esta  herramienta  no  utiliza  la  información  de  access.log,   la  contabiliza  desde  sus  propios  archivos
almacenados en bbclone/var.

24 de 35
Curso Mentor Apache

Rendimiento
Ubuntu

A menudo es posible aumentar el rendimiento de un sitio web a costa de sacrificar algo su seguridad. Vamos a ver qué podemos
manipular en nuestro servidor web para aumentar su velocidad sin exponer demasiado su seguridad.
Hay  que  tener en cuenta que lo  que puede aumentar  el  rendimiento  en  un  servidor  no  ha  de  tener  los  mismos  efectos  en  otro
servidor distinto.
Existe una aplicación llamada ab (apache bench) que funciona en línea de orden y que permite evaluar el rendimiento del servidor.
ab   es   muy   útil  cuando  hacemos   cambios   en  la  configuración  y   queremos   comprobar  de  qué  forma  se  ha  visto  afectado  el
rendimiento con esos cambios, antes y después.
La forma más usual de utilizar la herramienta ab es la siguiente:

# ab -n 500 -c 10 http://servidor.apache2.com/test.html

que dice a ab que solicite al servidor web dado 500 veces el archivo test.html y se produzcan 10 peticiones concurrentes.

-n : nº de solicitudes
-c : nivel de concurrencia

La salida generada por la orden anterior es:

This is ApacheBench, Version 2.3


<$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus
Technology Ltd,
http://www.zeustech.net/
Licensed to The Apache Software
Foundation, http://www.apache.org/

Benchmarking servidor.apache2.com
(be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Finished 500 requests
Server Software:
Apache/2.2.16
Server Hostname:

25 de 35
Curso Mentor Apache

servidor.apache2.com
Server Port: 80

Document Path: /test.html


Document Length: 293 bytes

Concurrency Level: 10
Time taken for tests: 0.120
seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Non-2xx responses: 500
Total transferred: 248000 bytes
HTML transferred: 146500 bytes
Requests per second: 4153.00
[#/sec] (mean)
Time per request: 2.408 [ms]
(mean)
Time per request: 0.241 [ms]
(mean, across all concurrent
requests)
Transfer rate: 2011.61
[Kbytes/sec] received

Connection Times (ms)


min mean[+/-sd] median max
Connect: 0 1 0.5
1 3
Processing: 0 2 1.0
2 8
Waiting: 0 1 1.0

26 de 35
Curso Mentor Apache

1 8
Total: 1 2 1.1
2 8

Percentage of the requests served


within a certain time (ms)
50% 2
66% 2
75% 3
80% 3
90% 4
95% 4
98% 7
99% 7
100% 8 (longest request)
El funcionamiento de ab no simula las peticiones de un usuario real (está claro que un usuario no solicita 500 veces el mismo
archivo) por lo que el rendimiento obtenido no es exactamente el rendimiento real.
Es importante no ejecutar ab desde el mismo equipo en el que está rodando el servidor web.
Existen muchos factores que pueden afectar a la medición del rendimiento sucesivas veces, ya que, por ejemplo, las condiciones
de la red pueden ser diferentes o el número de procesos ejecutándose en el servidor puede variar. Por ello es preferible hacer varias
mediciones y obtener la media.

Por otra parte y por defecto la instalación de Apache2 carga el módulo  mod_status que nos permite conocer la actividad del


servidor.
Para ello incluimos en el sitio (por ejemplo default) la siguiente porción de código:

<Location /server-status>
SetHandler server-status
order deny,allow
deny from all
allow from 192.168.0.103
</Location>
ExtendedStatus On

Este código nos permite conocer detalles del servidor como cuándo fue el último reinicio, tiempo que lleva activado, cantidad de
datos   que  ha  tramitado  durante  ese  tiempo,   procesos   llevados   a  cabo  y   su  función,   etc.   Incluye  también  la  actividad  de  los
servidores virtuales.

ExtendedStatus On permite generar información completa de estado.

Para visualizar toda esta información desde el navegador ir a: http://servidor.apache2.com/server-status.

27 de 35
Curso Mentor Apache

Server-info

Por otra parte y  por defecto la instalación de Apache2 carga el módulo mod_info que nos  permite conocer la


actividad del servidor.
En primer lugar nos aseguramos que el modulo mod-info está habilitado. Para ello ejecutamos:

$ sudo a2enmod info

E incluimos en el sitio, del que queremos conocer la actividad, la siguiente porción de código:

<Location /server-info>
SetHandler server-info
order deny,allow
deny from all
allow from 192.168.0.103
</Location>

Este  código  nos   permite  conocer  detalles   del  servidor  como  la  versión  del  servidor  y   parámetros   generales   de  configuración,
módulos cargados, tiempo que lleva activado, cantidad de datos que ha tramitado durante ese tiempo, procesos llevados a cabo y
su función, etc. Incluye también la actividad de los servidores virtuales.

Para visualizar toda esta información desde el navegador ir a: http://servidor.apache2.com/server-info.

28 de 35
Curso Mentor Apache

Por seguridad podemos ocultar esta información poniendo:

<Location /server.informacion.pagina>
<Location /server.status.pagina

Windows

En  Windows  la  salida  generada  por  la  orden  es  la  totalmente  paralela.   La  utilidad  ab  está  en C:\Program Files\Apache
Software Foundation\Apache2.2\bin.

Este código nos permite conocer detalles del servidor como cuándo fue el último reinicio, tiempo que lleva activado, cantidad de
datos   que  ha  tramitado  durante  ese  tiempo,   procesos   llevados   a  cabo  y   su  función,   etc.   Incluye  también  la  actividad  de  los
servidores virtuales. 
Añadimos el código indicado en httpd.conf 

<Location /server-status>
SetHandler server-status
order deny,allow
deny from all
allow from 192.168.0.103
</Location>
ExtendedStatus On

ExtendedStatus On permite generar información completa de estado.
Además, en Windows descomentamos la línea:

29 de 35
Curso Mentor Apache

LoadModule status_module modules/mod_status.s

30 de 35
Curso Mentor Apache

Glosario
Glosario Unidad 8

Concepto Definición

Acceso (hit) Número  de  peticiones  de  archivos  que  se  realizan  al  servidor  durante  un  período  de  tiempo  dado.   Se
confunde con visitas, pero no son lo mismo. Un hit es un acceso, una petición al servidor de un archivo.
El número de Accesos siempre será mayor que el número de visitas.

Analizador de logs Aplicación  que  permite  obtener  estadísticas   de  acceso  a  un  servidor  web,   indicando  cuáles   son  las
páginas más visitadas, etc

Cadenas de búsqueda Palabra o palabras clave que se usan en los buscadores para llegar a nuestra página web o sitio web.

Referidos Sitios  a  través  de  los  que  se  accede  a  nuestra  página,   ya  sean  buscadores  u  otras  páginas  que  nos
enlacen.

Registro de Apache2 Sistema de almacenamiento de información relativa a los accesos y las situaciones de error.

Rotación de logs El proceso de rotación de archivos de registro consiste en la rotación automática, comprensión,
extracción de los archivos de logs.

Visita Cuando un usuario entra en una página web se produce una visita. Todo el tiempo que navegue por la web
contará como esa visita, sólo una. La primera petición que realiza ese cliente remoto es lo que cuenta
como visita.

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

31 de 35
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Página oficial de apache: http://www.apache2.es/2.2.2/

32 de 35
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 8 'Registro y monitorización de
Apache2'
Los puntos a destacar de esta unidad son los siguientes:

1. La instalación de Apache2 por defecto deja activados sus mecanismos de registro de actividad en general del servidor web.
Permite  almacenar  información  relativa  a  errores   producidos   al  ejecutar  el  proceso  apache2  (Registro  de  error)  y   a  los
accesos al servidor (Registro de actividad).
2. El proceso de rotación de archivos de registro consiste en salvar el archivo actual bajo otro nombre y crear uno nuevo vacío.
De esta forma, sin renunciar a disponer de todos los sucesos del sistema, se puede trabajar con archivos de menor tamaño.
Logrotate es una utilidad que lleva acabo la rotación automática, comprensión, extracción y envío de los archivos de logs.
3. Apache2 dispone de herramientas web que proporcinan estadísticas de uso y de esa forma conocer qué páginas son mas
frecuentemente servidas y cuáles menos. Webalizer y Awstats son dos de ellas y válidas tanto para Ubuntu como para
Windows.
4. Desde Windows se ha estudiado la aplicación BBClone como analizador de accesos a Apache2. BBClone detalla para cada
visitante su dirección IP, sistema operativo, navegador, desde que URL han accedido a su sitio web utilizando una interfaz
gráfica. Es, además, software libre con licencia GNU General Public License.

33 de 35
Curso Mentor Apache

Autoevaluación Unidad 8
Autoevaluación

El cuestionario de autoevaluación de la Unidad 8 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

34 de 35
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 8

35 de 35
Curso Mentor Apache

Apache
Unidad 9: Proxy / WedDav

 
En este capítulo aprenderás:
a configurar Apache2 como proxy para tu red local tanto desde Ubuntu como desde Windows.
A configurar Apache2 como caché web acelerando de esa forma los accesos de los clientes a Internet.
A configurar Apache como servidor WebDAV y permitiendo así crear espacios de colaboración.
A utilizar las directivas asociadas a las acciones anteriores.
A activar y utilizar los módulos de Apache implicados en las funcionalidades anteriores.

Material complementario:
1. Archivo con las actividades referidas a lo largo del capítulo. Archivo U9_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U9_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf

1 de 21
Curso Mentor Apache

Introducción
Objetivos

Conocer los conceptos de proxy, caché y webdav.

Preparar Apache2 como servidor de cada uno de estos servicios.

Conocer las directivas implicadas en estos servicios.

Realizar la configuración necesaria de Apache2 funcionando como servidor de estos servicios en ambos sistemas
operativos.

Conocimientos previos

En  esta  unidad  estudiamos   diferentes   funcionalidades   de  Apache2  que  requieren  la  activación  de  ciertos   módulos   y   unas
configuraciones específicas relacionadas con la utilización de Apache como  proxy-caché y servidor WebDav.
Es una unidad sencilla, con conceptos muy asequibles y útiles e interesantes para aplicar a nuestro servidor web.

Contenidos

Unidad 9: Proxy / WebDav
A. Ubuntu

1. Apache2 como servidor proxy


2. Apache2 como servidor caché web
3. Apache2 como servidor WebDav

B. Windows

1. Apache2 como servidor proxy-caché


2. Apache2 como servidor WebDav

C. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 21
Curso Mentor Apache

Ubuntu:
Introducción

Apache2 puede funcionar como servidor proxy, servidor de caché o una combinación de ambos.
Servidor proxy es un servidor intermedio entre el cliente y el servidor de origen que acepta las peticiones de los clientes, las
transmite al servidor de origen, y después devuelve la respuesta del servidor de origen al cliente.
Si varios clientes piden el mismo contenido, el proxy sirve el contenido desde su caché, en lugar de pedirlo cada vez que lo
necesita al servidor de origen, reduciendo con esto el tiempo de respuesta.
El  término  proxy  indica  que  se  está  actuando  en  nombre  de  otro  elemento.   En  términos  de  servidores  quiere  decir  que  un
servidor obtiene información de otro servidor para mostrarlo al cliente web.
La  gestión  del   comportamiento  de  Apache2  como  proxy   la  proporciona  el   módulo  mod_proxy   que  viene  como  módulo
disponible pero no está activado por defecto.
Lo   usual   en   las   aulas   es   disponer   de   una   herramienta   proxy   específica,   como   puede   ser   Squid   que   es   ampliamente
configurable. Pero, es su defecto se puede configurar Apache2 para llevar a cabo dicho servicio.
¿Cuáles son entonces las ventajas de utilizar Apache 2 como proxy-caché?

Una sola máquina tiene acceso a Internet.
El cliente queda oculto detrás del servidor.
La red interna, su estructura y tipología queda oculta.
Es posible llevar un control del tráfico generado por los clientes en la red interna.
Es posible bloquear o filtrar accesos.

En general, son las ventajas de la utilización de un proxy, como pudiera ser Squid o cualquier otro y que podemos resumir en:

1. Seguridad: el servidor proxy es utilizado por los clientes como puerta de enlace hacia Internet.
2. Caché:   el  servidor  proxy   almacena  la  páginas   accedidas   recientemente  y   esto  agiliza  los   posteriores   accesos   a  las
mismas.
3. Filtrado: como todas las peticiones de la red interna pasan a través del proxy podemos incorporar reglas de acceso a
Internet y a sus contenidos.

En  nuestro  caso  configuraremos   el  módulo  proxy  para  que  las   máquinas   de  la  red  local  192.168.0.0/24  salgan  a  Internet
utilizando como proxy el servidor web Apache2.

3 de 21
Curso Mentor Apache

Apache2 como servidor proxy


Activación del módulo proxy

Listamos el directorio  /etc/apache2/mods-available y comprobamos que el módulo mod_proxy está disponible,


junto con otros módulos proxy que complementan su funcionalidad:

# ls /etc/apache2/mods-available/ | grep proxy
proxy_ajp.load
proxy_balancer.load
proxy.conf
proxy_connect.load
proxy_ftp.load
proxy_http.load
proxy.load
proxy_scgi.load
Activamos los módulos siguientes:

# a2enmod proxy
Module proxy installed; run /etc/init.d/apache2 force-reload to enable.
# a2enmod proxy_connect
# a2enmod proxy_ftp
# a2enmod proxy_http
# /etc/init.d/apache2 force-reload

Configuración básica del módulo proxy

Editamos el archivo de configuración  /etc/apache2/mods_available/proxy.conf. En este archivo activamos, en el


servidor  Apache2,   las   peticiones   proxy   (ProxyRequests On)  y   limitamos   el  acceso  a  Internet   mediante  Apache2  a  las
máquinas de la red local 192.168.0.0/24.

<IfModule mod_proxy.c>
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168.0.
</Proxy>
</IfModule>

NOTA: si en la línea Allow from colocamos un nombre de dominio habrá que comprobar que desde el servidor se resuelven
correctamente los nombres de los clientes, vía DNS o vía /etc/hosts.

El resto del archivo de configuración lo mantenemos como está.
Relanzar/recargar el demonio de Apache2:

# /etc/init.d/apache2 force-reload

4 de 21
Curso Mentor Apache

MUY IMPORTANTE
Desde  el  navegador  web  Firefox   del  equipo  cliente  hay  que  configurar  la  salida  a  Internet.   Vamos  a  utilizar  como  proxy  la
máquina 192.168.0.1 escuchando en el puerto 80, que se supone que es donde reside el servidor Apache2.
Comprobar que el acceso a Internet desde Firefox en el cliente es correcto.

Apache2 funcionando como filtro de contenido

Apache2 bloquea peticiones HTTP, HTTPs y FTP de sitios que en su nombre contengan el dominio, host o palabra dada.
Por ejemplo: www.sex.com se podrían bloquear todos aquellos dominios que contuvieran 'sex' en su nombre.
Apache2 funcionando como proxy dispone de directivas específicas para el filtrado de contenidos, que nos permiten bloquear
hosts   concretos,   dominios   y   hosts/dominios   cuyo   nombre   se   proporciona   parcialmente.   De   esta   forma   se   prohiben   las
solicitudes a ciertas direcciones.
Ejemplos:
1. Bloquear un host:
ProxyBlock www.google.es

2. Bloquear el dominio:
ProxyBlock google.es

3. Bloquear cualquier host/dominio que contenga una cadena:
ProxyBlock google

4. Bloquear cualquier petición:
ProxyBlock *

Si   queremos   configurar   Apache2   para   impedir   conexiones   a   www.elpais.es   hay   que   editar   el   archivo /etc/apache2
/mods_available/proxy.conf y añadir la línea:

ProxyRequests On
ProxyBlock www.elpais.es
<Proxy *>
.................
Desde el navegador (ya preparado) comprobar que se deniega el acceso a esta página web.

5 de 21
Curso Mentor Apache

Apache2 como servidor caché web


Introducción

Cuando un servidor Apache2 funciona como proxy también se puede hacer que funcione como caché.
A  medida que se vayan haciendo solicitudes en el servidor proxy-caché, primero se comprobará si hay copias locales de las
páginas solicitadas.

Si las hay, el servidor Apache2 mostrará al cliente web las páginas cacheadas.
Si no están en el servidor Apache2, se traerán desde Internet y se almacenarán en la caché.

La utilización de Apache2 como caché puede mejorar los tiempos de respuesta y disminuir el tráfico de red.
Estas mejoras dependerán de la cantidad de disco asignada a la caché, de los tiempos de caducidad de la caché, etc.

Activación del módulo caché

Para utilizar la caché se debe activar el módulo correspondiente mod_cache ya que por defecto viene desactivado.

#ls /etc/apache2/mods-available | grep cache
cache.load
disk_cache.load
disk_cache.conf
file_cache.load
mem_cache.load
mem_cache.conf
El   módulo  fundamental   para  activar   la  caché  de  disco  es   disk_cache   en  cuyo  archivo  de  configuración  daremos   los
parámetros de nuestra caché.

#a2enmod file_cache mem_cache disk_cache
#/etc/init.d/apache2 force-reload

Directivas relacionadas

Vamos a ver ahora qué directivas son las que gobiernan el funcionamiento de Apache2 como proxy-caché.
Así   como  la  directiva  básica  para  el  funcionamiento  de  Apache2  como  proxy  era  ProxyRequests,   la  directiva  básica  de
funcionamiento como caché es CacheRoot que proporciona la ubicación para los archivos en la caché.
Directivas relacionadas con la caché son:

Caché Descripción
CacheRoot Proporciona la ubicación para los archivos en la caché. Módulo disk_cache.

6 de 21
Curso Mentor Apache

Caché Descripción
CacheSize Establece  la  máxima  cantidad  de  espacio  en  KB   que  será  usado  en  caché.
Conviene  dar  el  valor  máximo  disponible  para  el  sistema  de  archivos.   Es   una
directiva que está documentada en Apache 2.2 pero no está activa.
CacheMaxExpire Nº   de  segundos  que  un  objeto  puede  estar  en  la  caché  sin  chequear  la  página
origen para determinar si esta página ha sido actualizada. Módulo mod_cache.
CacheLastModifiedFactor Define  el  valor  que  será  usado  para  calcular  si  un  objeto  en  la  caché  debería
expirar  cuando  este  objeto  no  tiene  marca  de  fecha  de  expiración.   Ejemplo:   un
factor de 0.1 para un tiempo de 20h desde la última modificación daría una fecha
de expiración de 2h. Módulo mod_cache.
CacheGcInterval Limpieza  periódica  de  la  caché.   El  servidor  cada  X   horas   recoge  la  basura  y
garantiza que la caché contiene menos del tamaño en Kb indicado en CacheSize.

CacheDefaultExpire Nº   de  segundos   para  que  un  objeto  expire  si  este  no  tiene  ninguna  fecha  de
expiración. Configuración del servidor, virtual host. Módulo mod_cache.

CacheMaxFileSize Valor máximo (tamaño en bytes) para los objetos almacenados en caché. Módulo
disk_cache.

CacheMinFileSize Valor mínimo (tamaño en bytes) para los objetos almacenados en caché. Módulo
disk_cache.

Al  ejecutar  el  servidor  Apache2   como   caché   agilizamos  a   los  usuarios  el  acceso   a   contenidos  que   ya   han   sido
solicitados por él mismo o por otros usuarios.
El único problema en estos casos es la actualización de los contenidos ya que lo que se muestra es una copia local
del objeto.

Configuración de Apache como caché

A continuación establecemos una configuración sencilla para la caché de Apache2.

1. Editamos   el   archivo   de   configuración   del   módulo   disk_cache /etc/apache2/mods-available


/disk_cache.conf y comprobamos la línea:

CacheRoot /var/cache/apache2/mod_disk_cache
2. Este  directorio  existe  por  instalación  y   comprobamos   que  el  dueño  y  el  grupo  son  del  usuario  que  ejecuta  Apache2
www-data:

drwxr-xr-x 2 www-data www-data 4096 2007-08-17 00:54 mod_disk_cache
     3. En el archivo de configuración disk_cache.conf añadimos las líneas que configuran el comportamiento de la caché:

<IfModule mod_disk_cache.c>
CacheRoot /var/cache/apache2/mod_disk_cache
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
CacheMaxFileSize 64000
CacheMinFileSize 64
</IfModule>

7 de 21
Curso Mentor Apache

8 de 21
Curso Mentor Apache

Apache2 como servidor WebDav


Introducción

WebDAV (Web-based Distributed Authoring and Versioning, Autoría y Versionado Distribuido basado en Web) es un estándar
que describe como, a través de la extensión del protocolo HTTP 1.1, se puede escribir, copiar, eliminar o modificar archivos.
También puede modificar sus propiedades, nombre o características de seguridad, niveles de acceso, etc. Es decir, permite
utilizar un servidor de archivos web remoto como si fuera un servidor de archivos local.
WebDAV sigue el lema: "makes the Web Writable".
Sabemos que la información existente en la web es de solo lectura. Cuando se solicita acceder a una página web el servidor 
responde con una copia de dicha página, visible en el navegador.  El protocolo HTTP no tiene ningún medio definido  por el que
el usuario pueda modificar una página o crear una nueva. Normalmente se recurre a protocolos como ftp o sftp.
WebDAV  es un protocolo construido sobre HTTP, al cual complementa con un conjunto de instrucciones que permiten esta
comunicación bidireccional, ofreciendo la posibilidad, como se ha comentado antes, de crear, modificar o mover documentos en
un servidor remoto, y que incluso permite construir sistemas de archivos distribuidos accesibles desde cualquier sitio.
El objetivo  de  WebDAV   es  conseguir  convertir la  web,  a  través  del  protocolo  HTTP,   en  un espacio  de  colaboración,
donde varios usuarios puedan participar conjuntamente en la elaboración de documentos.
Algunas  de   las  características  mas  destacadas  de   webdav   (aparte   de   proporcionar  acceso  a   la   escritura   del
documento vía http) son:

Permite deshabilitar el acceso en escritura: necesario en un entorno de trabajo compartido, y así evitar que el
trabajo de un usuario interfiera en el trabajo del anterior sobre el mismo documento.
Permite  describir propiedades (metadatos) del documento  en  formato  xml (título, autor, fecha, tamaño) que
aunque no aparecen en el documento, dan información sobre el mismo y pueden ser gestionadas por dav.
Permite llevar un registro de las sucesivas versiones del documento así como recuperar cualquiera de ellas.

Algunos de estas características de WebDAV están ya disponibles utilizando otros mecanismos. Por ejemplo:

la transferencia de archivos vía http:  se hace siempre vía ftp
el control de las versiones de un documento: se hace con cvs

¿Porque entonces utilizar WebDAV?
La ventaja de utilizar WebDAV estriba en que estas funciones, al estar basadas en http, son mas potentes y flexibles. Además y
como consecuencia desaparece la diferencia entre disco duro y espacio web. De esta forma se puede utilizar el espacio web
para almacenar documentos de los que se necesita tener disponibilidad inmediata y segura.
Con un navegador adecuado el usuario podría acceder y manipular la información. Por ejemplo, OpenOffice 2 ya
lleva incorporado soporte DAV.
Además,   con   WebDAV   los   usuarios   pueden   montar  directorios   compartidos   con   una   funcionalidad   similar  a   la
utilización de protocolos NFS o SMB.
La utilización de este servicio requiere un servidor WebDAV (activado el módulo mod_dav que ya viene incluido en Apache2) y
un cliente preparado para comunicarse con el servidor.
La página oficial del proyecto es http://webdav.org.

Configuración de Apache2 como servidor webdav

Hemos   visto  ya  como  habilitar  un  directorio  en  el  servidor  Apache  con  nuestros   contenidos   públicos.   Pero  sólo  como  un
directorio de descarga, los usuarios que acceden a él no tienen forma de subir archivos o editar los archivos disponibles.

9 de 21
Curso Mentor Apache

WebDAV permite que la carpeta compartida se muestre en nuestro escritorio y en el de otros usuarios como una carpeta
local más, permitiendo editar su contenido.
WebDAV permite bloquear archivos para prevenir que dos personas editen el mismo contenido al mismo tiempo.

Vamos a añadir soporte a WebDAV a nuestro servidor Apache.
Habilitar los siguiente módulos:

#a2enmod dav
#a2enmod dav_fs
#a2enmod auth_digest ;si no se ha habilitado en el Capítulo 6

Creamos un usuario y contraseña para acceder a la carpeta (OJO con la opción -c si ya tenemos creado el archivo):

#htdigest /etc/apache2/passwd/.htdigest “Directorio compartido” usuario-dav

Ahora creamos un nuevo host virtual en nuestra web con información para compartir por WebDAV:

#gedit /etc/apache2/sites-available/webdav
Incluimos:

<VirtualHost * >
ServerName webdav.apache2.com
DocumentRoot /var/www/compartido
Alias /dav /var/www/compartido
<Directory /var/www/compartido>
AuthType Digest
AuthName "directorio compartido"
AuthUserFile /etc/apache2/passwd/.htdigest
Require valid-user
Options None
AllowOverride None
</Directory>
Alias /dav /var/www/compartido
<Location /dav>
DAV On
</Location>

Para que se pueda resolver este nuevo host virtual debemos incluirlo en el archivo  db.apache2.com si se está utilizando


bind o en /etc/hosts.

Creamos el directorio y le decimos que pertenezca al servidor web (para que éste pueda escribir en ese directorio):

#mkdir /var/www/compartido
#chown www-data.www-data /var/www/compartido
#chmod 750 /var/www/compartido

En función del valor de umask definido en el sistema, es posible que al crear el directorio tenga asignados estos permisos.

#mkdir /var/lock/apache2
#chown www-data.www-data /var/lock/apache2
#chmod 750 /var/lock/apache2

Es posible que este directorio ya exista. Comprobar el dueño y grupo y los permisos.
Comprobar que en el archivo de configuración del módulo dav_fs.conf existen las líneas:

10 de 21
Curso Mentor Apache

DAVLockDB /var/lock/apache2/DAVLock
DAVMinTimeout 10

Habilitamos nuestro nuevo espacio web (host virtual webdav):

#a2ensite webdav
#/etc/init.d/apache2 force-reload

Para probar el funcionamiento mediante una conexión al servidor WebDAV hay que ir a:

Lugares -> Conectar con el servidor ...

Acabar de completar con los datos siguientes:

Nos   conectamos   al   servidor   WebDAV   y   al   forzar  autenticación  digest   nos   pide  usuario  y   contraseña  de  un  usuario  con
autorización, en nuestro caso usuario-dav.
Si introducimos el nombre del usuario en la ventana 'Conectar al servidor' ahora sólo pedirá la contraseña.
Nos mostrará el contenido del directorio /var/www/compartido como una carpeta más del sistema (unidad de red)
permitiendo la edición de los archivos que contiene.

11 de 21
Curso Mentor Apache

Windows:
Introducción

Vamos a configurar Apache2 como proxy-caché desde Windows.
Como ya se comentó desde Ubuntu, una de las ventajas de utilizar Apache2 como proxy (si no se dispone del servicio proxy en
el sistema) es que ofrece la posibilidad al administrador de controlar los accesos a Internet de los usuarios.

12 de 21
Curso Mentor Apache

Apache2 como proxy-caché


Configuración

Para ello editamos el archivo C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
1. Activar el módulo proxy_module eliminando '#':

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

2. Activar el proxy propiamente. Debemos incluir una sección <IfModule> en la que incluiremos las directivas específicas de
activación y ámbito de aplicación de Apache2 como proxy.

<IfModule proxy_module>
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168.0.
</Proxy>
</IfModule>

Esta sección permite que Apache2 acepte peticiones proxy dentro de la red 192.168.0.0/24.
Si sólo queremos que Apache funcione como caché debemos comentar la directiva ProxyRequests. De esta forma se limitará
a funcionar como servidor de caché.
MUY IMPORTANTE
Desde  el  navegador  web  Firefox   del  equipo  cliente  hay  que  configurar  la  salida  a  Internet.   Vamos  a  utilizar  como  proxy  la
máquina 192.168.0.1 escuchando en el puerto 80, que se supone que es donde reside el servidor Apache2.
Comprobar que el acceso a Internet desde Firefox en el cliente es correcto.

Configuración de Apache como caché

A continuación establecemos una configuración sencilla para la caché de Apache2.
1. Editamos el archivo de configuración httpd.conf y en la sección IfModule del módulo proxy añadimos la línea:

CacheRoot   "C:/Program   Files/Apache   Software   Foundation/Apache2.2


/proxy_cache"

2. Este directorio muy probablemente no existirá. Crearlo y tener en cuenta que el usuario que ejecuta Apache2 debe poder
modificar dicho directorio.
3. El comportamiento de la caché se configura añadiendo las siguientes líneas en la sección IfModule:

13 de 21
Curso Mentor Apache

CacheRoot   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2


/proxy_cache"
CacheSize 500
CacheGcInterval 4
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
CacheDefaultExpire 3600

Si no definimos CacheRoot no se llevará a cabo la función de caché. El resto de directivas para caché sirven para determinar
las características de la caché.
 
A continuación establecemos una configuración sencilla para la caché de Apache2.
1. Editamos el archivo de configuración httpd.conf y en la sección IfModule del módulo proxy añadimos la línea:

CacheRoot   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2


/proxy_cache"

2. Este directorio muy probablemente no existirá. Crearlo y tener en cuenta que el usuario que ejecuta Apache2 debe poder
modificar dicho directorio.
3. El comportamiento de la caché se configura añadiendo las siguientes líneas en la sección IfModule:

CacheRoot   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2


/proxy_cache"
CacheSize 500
CacheGcInterval 4
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
CacheDefaultExpire 3600

Si no definimos CacheRoot no se llevará a cabo la función de caché. El resto de directivas para caché sirven para determinar
las características de la caché.

14 de 21
Curso Mentor Apache

Apache2 como servidor WebDAV


Configuración

Vamos   a  explicar  cómo  se  activa  el  módulo  de  Apache2  mod_dav  y   la  configuración  necesaria  para  que  nuestro  servidor
Apache se convierta en un servidor WebDAV.

Recordar  que  el  objetivo  de  WebDAV   es   conseguir  convertir   la  web,   a  través   del  protocolo  HTTP,   en  un  espacio  de
colaboración, donde varias personas puedan participar conjuntamente en la elaboración de documentos.

Para ello:

1. Descomentar la línea LoadModule correspondiente al módulo en httpd.conf

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

2. Descomentar la línea Include correspondiente en httpd.conf

Include conf/extra/httpd-dav.conf

3.   Comprobar   que   el   archivo   de   configuración   C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2


\conf\extra\httpd-dav.conf contiene la directiva DAVLockDB que localiza la BBDD de bloqueo que utiliza mod_dav para que
no se puedan interferir diferentes operaciones con este protocolo.

DavLockDB "C:/Archivos de programa/Apache Software Foundation/Apache2.2/var/DavLock"

4. Comprobar/crear el directorio al que hace referencia la directiva DAVLockDB teniendo en cuenta que el usuario y grupo de
Apache2 tenga permisos para escribir en él. Este directorio debe coincidir con la sección Directory que contiene la directiva
DAV On. Para ello:

C:/Archivos de programa/Apache Software Foundation/Apache2.2/> mkdir var

5. Creamos el directorio para los contenidos que pueden ser objeto de operaciones WebDAV.

C:/Archivos de programa/Apache Software Foundation/Apache2.2/htdocs/> mkdir uploads

6. Utilizar htdigest   para  crear  la  base  datos   de  contraseñas   del  dominio  DAV-upload y dar de alta el
usuario admin:

htdigest   -c   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2


/bin/user.passwd” DAV-upload admin

7. El contenido del archivo de configuración httpd-dav.conf es el siguiente:

DavLockDB "C:/Archivos de programa/Apache Software Foundation/Apache2.2/var/DavLock"
Alias   /uploads   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2/htdocs
/uploads"
<Directory   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2/htdocs
/uploads">
Options Indexes Followsymlinks
Dav On
Order Allow,Deny
Allow from all
AuthType Digest
AuthName DAV-upload
AuthUserFile   "C:/Archivos   de   programa/Apache   Software   Foundation/Apache2.2

15 de 21
Curso Mentor Apache

/bin/user.passwd"
<LimitExcept GET OPTIONS>
require user admin
</LimitExcept>
</Directory>

Acceso a la zona colaborativa:
1. Asegurarse de que la carpeta uploads tiene permisos de lectura y escritura para todos los usuarios.
2. Ir a Mis sitios de Red -> Añadir sitios de Red. En la ventana que solicita la localización del sitio de Red ir a Examinar y
buscar y seleccionar, en la red de Microsoft, la carpeta que hemos compartido como uploads.
3. Copiar la URL completa incluyendo http://
4. Aparece la pantalla de conexión al servidor que solicita el usuario y la contraseña de red.
5. Introducir el nombre de usuario creado y la contraseña. Aceptar.
6. Aparece la pantalla Bienvenido al asistente de añadir sitios de Red. Introducir un nombre para el sitio de Red.
Finalizar.
7. Aparece una carpeta web con los archivos disponibles de uploads. Estos archivos se pueden eer, copiar, modificar, guardar y
cambiar el nombre en el servidor Apache2 de igual forma a como se podría desde un explorador de archivos.
En el caso de que se presente algún problema con la utilización de WebDAV en Windows XP se puede utilizar la herramienta
DAVExplorer.

16 de 21
Curso Mentor Apache

Glosario
Glosario Unidad 9

Concepto Definición

Servidor proxy Servidor intermedio entre el cliente y el servidor de origen que acepta las peticiones de los clientes, las


transmite al servidor de origen, y después devuelve la respuesta del servidor de origen al cliente.

Servidor Servidor que almacena localmente las páginas consultadas recientemente por los usuarios, evitando así
proxy-caché la conexión directa del usuario al servidor remoto y así obtener un gran incremento en la velocidad de
transferencia de la información.

Squid Squid es un programa de software libre que implementa un servidor proxy y un demonio para caché
web, bajo licencia GPL que dispone de una gran cantidad de utilidades y opciones de configuración.

WebDAV (Web-based Distributed Authoring and Versioning) protocolo sobre HTTP que permite crear, modificar o
mover  documentos  en  un  servidor  remoto.   La  utilización  de  este  servicio  permite  al  usuario  llevar  a
cabo modificaciones sobre páginas web accedidas que, en principio, sólo podría leer y sin necesidad de
utilizar otros servicios como FTP.

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario


/glosario_internet.html
Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

17 de 21
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Página oficial de apache: http://www.apache2.es/2.2.2/
3. http://linux.ues.edu.sv/content/webdav-y-apache2

18 de 21
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 9 'Proxy / WebDav'

Los puntos a destacar de esta unidad son los siguientes:

1. Servidor proxy es un servidor intermedio entre el cliente y el servidor de origen que acepta las peticiones de los clientes,
las transmite al servidor de origen, y después devuelve la respuesta del servidor de origen al cliente.
2. Apache2 funcionando como proxy dispone de directivas específicas para el filtrado de contenidos, que nos permiten
bloquear hosts concretos, dominios y hosts/dominios cuyo nombre se proporciona parcialmente.
3. La utilización de Apache2 como caché puede mejorar los tiempos de respuesta y disminuir el tráfico de red.
4. El  objetivo  de  WebDAV   es  conseguir  convertir  la web,  a  través del  protocolo HTTP,   en  un espacio  de colaboración,
donde varios usuarios puedan participar conjuntamente en la elaboración de documentos.
5. WebDAV permite que la carpeta compartida se muestre en nuestro escritorio y en el de otros usuarios como una carpeta
local más, permitiendo editar su contenido.

19 de 21
Curso Mentor Apache

Autoevaluación Unidad 9
Autoevaluación

El cuestionario de autoevaluación de la Unidad 9 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

20 de 21
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 9

21 de 21
Curso Mentor Apache

Apache
Unidad 10: MySQL y PHP en Apache2

 
En este capítulo aprenderás:
la utilización de Apache2 como servidor web base para instalación, configuración y uso de diferentes herramientas web.
la instalación y configuración de MySQL como SGBD y su uso básico.
la instalación y configuración del lenguaje de programación PHP5 únicamente como requerimiento de administración web de
MySQL.
la instalación y configuración de phpMyAdmin como herramienta de gestión web de MySQL.

Material complementario:
1. Archivo con las actividades referidas a lo largo del capítulo. Archivo U10_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U10_Mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf

NOTA Importante:
Es   importante   tener   en   cuenta   que   este   capítulo   no   contempla   una   explicación   exhaustiva   de   MySQL,   PHP   y
phpMyAdmin. El objetivo es conocer la integración y funcionamiento básico utilizando como plataforma de base Apache2.
Para evitar posibles interacciones y complicaciones es importante realizar la práctica en primer lugar teniendo activo sólo
el sitio por defecto. Una vez configurado y comprobado que funciona activar el resto de sitios virtuales definidos en las
sucesivas actividades y prácticas y comprobar que se mantiene el correcto funcionamiento.

1 de 25
Curso Mentor Apache

Introducción
Objetivos

Conocer los requerimientos del sistema para la instalación de MySQL en Apache2.

Realizar la instalación de MySQL en Apache en ambos sistemas operativos.

Realizar la instalación el soporte de PHP5 en ambos sistemas operativos.

Realizar la instalación, configuración y utilización básica de phpMyAdmin.

Conocimientos previos

En esta unidad abordamos la instalación y configuración básica de MySQL, así como de PHP5 para Apache2 y tanto para Ubuntu como para
Windows. Como dicha instalación y configuración es desde cero no requiere ningún conocimiento previo. 

Contenidos

Unidad 10: MySQL y PHP en Apache
A. Ubuntu

1. Instalación de MySQL
2. Configuración de MySQL
3. Instalación del soporte para PHP5
4. Instalación y configuración de phpMyAdmin

B. Windows

1. Instalación de MySQL
2. Instalación del soporte para PHP5
3. Instalación y configuración de phpMyAdmin

C. Fin de unidad

1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación

2 de 25
Curso Mentor Apache

Ubuntu:
Introducción a MySQL

MySQL es un Sistema Gestor de Bases de Datos Relacional (SGBDR).
MySQL ha sido desarrollado, distribuido y mantenido por MySQLAB, compañía comercial fundada por los desarrolladores de MySQL que
auna código abierto con negocio.
Un  Sistema  de  Gestión  de  Bases   de  Datos   (SGBDR)  es   una  aplicación formada  por  un  conjunto  de  programas   que  permiten  crear  y
gestionar bases de datos (BBDD).
Proporciona al usuario de la base de datos las herramientas necesarias para:

Definir las estructuras de los datos.
Manipular los datos: insertar, modificar, borrar y consultar los datos existentes.
Mantener la integridad de la información.
Proporcionar control de la privacidad y seguridad de los datos en la BBDD, permitiendo sólo el acceso a los usuarios autorizados.

En general, un Sistema Gestor de Bases de Datos Relacional puede administrar múltiples BBDD Relacionales. Y  la BBDD almacena los
datos en tablas separadas que se pueden relacionar entre sí.
Cada tabla representa una entidad de aquello que intentamos modelar y consiste en una serie de filas (o tuplas) y de columnas (o atributos).
Cada fila de una tabla tiene el mismo número de columnas y representa una instancia de esa entidad. Cada columna representa un atributo o
propiedad de la entidad y es de un tipo determinado.
MySQL es un servidor de bases de datos relacionales multihilo y multiusuario, muy utilizado en entornos GNU/Linux, es software libre y se
distribuye bajo licencia GNU GPL (http://www.gnu.org/).

Saber más ... sobre MySQL

Tienes disponible gran cantidad de información sobre MySQL en:

La Wikipedia: http://es.wikipedia.org/wiki/MySQL
Manual de MySQL: http://php.net/manual/es/book.mysql.php
Tutorial básico: http://www.mysqlya.com.ar/

3 de 25
Curso Mentor Apache

Instalación MySQL (v.5.0)


Instalación de paquetes MySQL

En primer lugar vamos a instalar los paquetes necesarios de MySQL. La propia instalación nos irá haciendo una serie de preguntas referentes
a la configuración de los paquetes.
Si la instalación la queremos hacer desde Synaptic tendremos que seleccionar el paquete mysql-server-5.1. Hay que fijarse en que no
exista ningún otro paquete de servidor instalado y si lo hubiera hacer una desinstalación completa que incluye archivos de configuración.

#apt-get install mysql-server-5.1
Leyendo lista de paquetes... Hecho
..................................
Se instalarán los siguientes paquetes extras:
libdbd-mysql-perl   libdbi-perl   libmysqlclient15off   libnet-daemon-perl   libplrpc-perl
mysql-client-5.0 mysql-common
Paquetes sugeridos:
dbishell libcompress-zlib-perl tinyca
Paquetes recomendados
mailx
Se instalarán los siguientes paquetes NUEVOS:
libdbd-mysql-perl libdbi-perl libmysqlclient15off libnet-daemon-perl
libplrpc-perl mysql-client-5.0 mysql-common mysql-server-5.0
.....................
¿Desea continuar [S/n]?
.......................
Configurando mysql-client-5.0 (5.0.38-0ubuntu1) ...
Configurando mysql-server-5.0 (5.0.38-0ubuntu1) ...
* Stopping MySQL database server mysqld [ OK ]
* Starting MySQL database server mysqld [ OK ]

La propia instalación ya lanza el demonio (proceso servidor) de MySQL que es mysqld. Para comprobar que está funcionando y buscar en
qué puerto está escuchando el servicio:

#netstat -atunp|grep mysql
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2579/mysqld

El proceso de instalación avisa de la necesidad de proteger el servidor asignando una password al usuario que hace de root.
El servidor de bases de datos MySQL dispone en /etc/mysql/ de varios archivos de configuración:

/etc/mysql/debian.cnf archivo de configuración directamente creado por Debian y que no debe modificarse.
/etc/mysql/my.cnf archivo de configuración del servidor de MySQL y que contiene las opciones globales. Los usuarios pueden
disponer de configuraciones personalizadas creando archivos del tipo ~/.my.cnf.

/etc/mysql/conf.d directorio con archivos que configuración que serán incluidos.

4 de 25
Curso Mentor Apache

Configuración de MySQL
Configuración

El archivo /etc/mysql/my.cnf está dividido en secciones con la sintaxis siguiente:

# > indica que se trata de un comentario
[seccion] > indica que se inicia una sección. Los parámetros incluidos dentro de una sección afectan sólo a ésta. Ejemplo:

[mysqld]

A. Opciones para el servidor: sección [mysqld]

1. opcion = valor

Ejemplo:

port=3306 puerto en el que escucha el servidor

2. opcion se trata de parámetros booleanos que se establecen al estar presentes en el archivo de configuración.

Ejemplo:

log-bin si lo escribimos (descomentamos) registramos las actualizaciones realizadas
en todas las tablas

3. set-variable = variable = valor para establecer los valores de las variables.

Ejemplos:

set-variable=write_buffer=2M establecemos en 2MB el búffer de escritura.

Usando el archivo /etc/mysql/my.cnf podemos indicar que los mensajes de error aparezcan en castellano.

[mysqld]
....
language = /usr/share/mysql/spanish

El usuario mysql indicado en el archivo es el root de MySQL, no es el usuario root de nuestro sistema. Este usuario mysql se utilizará para
tareas administrativas y se darán privilegios a otros usuarios para la gestión de las bases de datos.

user=mysql

Por motivos de seguridad el paquete activa la red únicamente para la interfaz de loopback (127.0.0.1) utilizando la entrada 'bind-address' en
/etc/mysql/my.cnf.

Si queremos permitir conexiones desde otra máquina, hay que hacer que el servidor escuche en la interfaz de red. Por ejemplo, si nuestra IP
local es 192.168.1.1 escribiremos

bind-address = 192.168.1.1

El servicio mysql puede ser lanzado, parado o relanzado desde la línea de orden de la forma:

# /etc/init.d/mysql start/stop/restart

5 de 25
Curso Mentor Apache

Inicio de MySQL
Ejecución

Ya tenemos MySQL instalado y con una configuración mínima.
Inicialmente  cualquiera  puede  conectarse  al  servidor  MySQL  y  crear  o  modificar  las  bases  de  datos.   Lo  primero  que  debemos  hacer  es
asignar al usuario root una contraseña de acceso. Ver en este punto más adelante.
Se puede hacer de varias formas, pero para ejemplificar la forma de conectar al servidor lo hacemos:

# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

y aparece el prompt de introducción de comandos. Si no queremos hacer nada para salir, podemos escribir:

mysql> quit
Volvemos a entrar y veremos ejemplos de cómo trabajar en línea de orden con MySQL.
Acciones:

1. Listar las bases de datos que se crean por defecto en el proceso de instalación:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
2 rows in set (0.00 sec

Es importante saber que:

1. En las sentencias no importa que escribamos en mayúsculas o no.
2. Es importante escribir los nombres de los campos, tablas, bases de datos, en su forma original.
3. Las sentencias han de terminar en ;
4. Se mantiene un historial de comandos al que podemos acceder con los cursores.

Es importante también asignar password MySQL al usuario administrador.

2. ¿Cómo se comprobaría que el usuario root de MySQL no tiene password?
En primer lugar averiguamos qué tablas tiene la BBDD mysql, para ello indicamos que vamos a utilizarla:
mysql> use mysql;
Ahora solicitamos ver las tablas de esta B.D.:
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| func |
| help_category |
| help_keyword |
| help_relation |

6 de 25
Curso Mentor Apache

| help_topic |
| host |
| proc |
| procs_priv |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
Vamos a la tabla llamada 'user' que es la que almacena los usuarios. Una vez hecho esto hacemos una selección de la tabla que usaremos.
mysql> select * from user;

que muestra una tabla en la que podemos comprobar que el campo Password para el root está vacío:
Host User Password select_priv
localhost root y

Desde MySQL le asignamos password al usuario root de MySQL:

mysql> set password=password('elvira');
Query OK, 0 rows affected (0.00 sec)

3. Salir del servidor MySQL

mysql> exit
Bye

Si ahora intentamos entrar de nuevo con la misma orden comprobaremos que nos devuelve un error:
#mysql
Password:
ERROR   1045   (28000):   Acceso   negado   para   usuario:   'root'@'localhost'   (Usando   clave:
NO)

Hemos de avisar al servidor MySQL de quien somos (-u root , es decir el usuario root de MySQL) y que vamos a introducir la contraseña (-p
)

#mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
.............................................
mysql>

4. Crear una BBDD
Creamos una base de datos de prueba que llamaremos prueba y trabajar con algunos comandos básicos.

mysql> create database prueba;
Query OK, 1 row affected (0.05 sec)
y comprobemos los cambios:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| prueba |
+--------------------+

7 de 25
Curso Mentor Apache

También se puede crear la B.D. de la forma siguiente:

#mysqladmin -u root -p create prueba

5. Crear una tabla


Al crear la BBDD está vacía. Creamos una tabla sencilla que va a contener sólo dos campos: nombre y apellidos, que serán de tipo texto de
un máximo de 20 caracteres, longitud variable (VARCHAR) y no permitimos que ninguno de los dos quede vacío (not null).
Para ello primero indicamos qué BBDD vamos a usar y, a continuación, creamos la tabla 'datos':

mysql> USE prueba;
Database changed
mysql>   create   table   datos(nombre   varchar(20)   not   null,   apellidos   varchar(30)   not
null);
Query OK, 0 rows affected (0.01 sec)
Comprobemos las tablas creadas con:

mysql> show tables;
+------------------+
| Tables_in_prueba |
+------------------+
| datos |
+------------------+
1 row in set (0.00 sec)

De la misma forma podemos utilizar las opciones:

show status muestra las variables de estado del servidor
show variables lista las variables del servidor

6. Analizar la estructura de la tabla datos, podemos hacerlo con:

mysql> describe datos;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| nombre | varchar(20) | NO | | | |
| apellidos | varchar(30) | NO | | | |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

7. Introducir datos en la tabla

mysql> insert into datos values ("Juan","Sin Miedo"),("
Pepito","Grillo");
Query OK, 2 rows affected (0.00 sec)
Registros: 2 Duplicados: 0 Peligros: 0

8. Mostrar datos por pantalla

mysql> select * from datos;
+--------+-----------------+
| nombre | apellidos |
+--------+-----------------+
| Juan | Sin Miedo |
| Pepito | Grillo |

8 de 25
Curso Mentor Apache

+--------+-----------------+
2 rows in set (0.02 sec)

9. Autorizar otros usuarios
Tal y como está configurada MySQL hasta ahora, sólo el usuario root puede manejar esta BBDD 'prueba'. Si queremos que otro usuario
(usuario1) pueda manejarla hay que autorizarle:

mysql> grant all on prueba.* to usuario1@localhost identified by ’password’;
Query OK, 0 rows affected (0.00 sec)

10. Cambio de contraseña
Para modificar la contraseña de cualquier usuario de MySQL ejecutar:

# mysql -u root -p
................
mysql>   update   mysql.user   set   Password=password('nueva_contraseña')   where
user='nombre_usuario';
mysql> flush privileges;

11. Comprobación
El usuario usuario1 al que hemos dado permiso puede acceder a esta base de datos. Habrá que conectarse al servidor con:

$ mysql -u usuario1 -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution
..................
mysql>
introduciendo la contraseña asignada.
 
12. Conexión remota del usuario1

Si hemos permitido accesos vía red y queremos que el usuario usuario1 se pueda conectar de forma remota desde cualquier IP (representado
por el %) hemos de ejecutar la siguiente orden estando conectados como root:

mysql> grant all on prueba.* to usuario1@’%’ identified by ’contraseña’;
Query OK, 0 rows affected (0.00 sec)

13. MySQL escucha en otra IP
Si nuestro servidor de bases de datos está escuchando en la IP 192.168.1.1, para conectar usamos el comando:

$mysql -u usuario1 -h 192.168.1.1 -p
Previamente habría que modificar my.cnf para esa IP.
Usando los comandos GRANT y REVOKE de MySQL se pueden conceder y retirar, respectivamente, derechos a los usuarios.
 
14. Cierre y apertura de puertos
MySQL abre el puerto 3306. Si se quiere cerrar   se   puede hacer mediante la siguiente regla de
iptables:
# /sbin/iptables -t filter -A INPUT -p tcp -s 0/0 -d 0/0 --dport 3306 -i eth0 -j
DROP //para TCP
# /sbin/iptables -t filter -A INPUT -p udp -s 0/0 -d 0/0 --dport 3306 -i eth0 -j
DROP //para UDP

9 de 25
Curso Mentor Apache

Si se quiere abrir para dejar que se acceda remotamente habría que escribir las siguientes reglas:

#   /sbin/iptables   -t   filter   -A   INPUT   -p   tcp   -s   0/0   -d   0/0   --dport   3306   -j   ACCEPT


//para TCP
#   /sbin/iptables   -t   filter   -A   INPUT   -p   udp   -s   0/0   -d   0/0   --dport   3306   -j   ACCEPT
//para UDP

10 de 25
Curso Mentor Apache

Instalación del soporte para PHP5


Introducción

PHP   es   un  lenguaje  de  programación  interpretado,   de  alto  nivel,   ejecutado  en  el  servidor  y   usado  frecuentemente  para  la  creación  de
contenido para webs dinámicas. También permite la creación de aplicaciones con una interfaz gráfica para el usuario (GUI), utilizando
extensiones para las librerías Qt o GTK.
Su código está embebido en el código HTML y al ser ejecutado en el servidor PHP nunca es enviado al cliente. El servidor es el
quien procesa la petición del cliente ejecutando el código PHP y devolviendo el HTML generado.
Su nombre, PHP, es un acrónimo recursivo que significa "PHP Hypertext Pre-processor".
La instalación se puede hacer utilizando la herramienta Synaptic o la línea de orden.
1. Instalación del paquete correspondiente a PHP5

# apt-get install php5
Leyendo lista de paquetes... Hecho
...................................
Se instalarán los siguientes paquetes extras:
apache2-mpm-prefork libapache2-mod-php5 php5-common
Paquetes sugeridos:
php-pear
Los siguientes paquetes se ELIMINARÁN:
apache2-mpm-worker
Se instalarán los siguientes paquetes NUEVOS:
apache2-mpm-prefork libapache2-mod-php5 php5 php5-common
.......................................
¿Desea continuar [S/n]?

2. Soporte de PHP5 para BBDD
Como vamos a trabajar con el módulo php5-mysql que permite a PHP disponer de soporte de base de datos MySQL, lo instalamos:

# apt-get install php5-mysql
...................................
Se instalarán los siguientes paquetes NUEVOS:
php5-mysql
............................................
(Leyendo la base de datos ...
Desempaquetando php5-mysql (de .../php5-mysql_5.2.1-0ubuntu1.4_i386.deb) ...
Configurando php5-mysql (5.2.1-0ubuntu1.4) ...
Nos quedarán por instalar los paquetes libapache2-mod-php5 y phpMyAdmin.

3. Instalación de libapache2-mod-php5

libapache2-mod-php5 es un módulo para Apache2 que permite la autenticación HTTP contra la información almacenada en una base
de datos de MySQL.

# apt-get install libapache2-mod-php5
libapache2-mod-php5 ya está en su versión más reciente.

4. Apache2 funcionando
Comprobar   que   el   servidor   Apache2   sigue   funcionando   correctamente.   Para   ello   abrimos   el   navegador   web   y   escribimos
http://servidor.apache2.com y debería aparecer la página de inicio que indica que el servidor Apache2 se encuentra instalado y corriendo.

5. Ajuste de configuración
Probablemente al intentar cargar el módulo mod_php5 obtengamos el mensaje de error de que dicho módulo no existe. Tendremos pues

11 de 25
Curso Mentor Apache

que crear a mano los archivos correspondientes de carga y configuración, así como los enlaces simbólicos. Para ello ir a /etc/apache2
/mods-available/ y editar/crear el archivo php5.conf con las líneas:

<IfModule mod_php5.c>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
</IfModule>

Editar/crear el archivo php5.load con la línea:

LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

Crear los correspondientes enlaces simbólicos:

#ln -s /etc/apache2/mods-available/php5.load /etc/apache2/mods-enabled/php5.load
#ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

Reiniciar Apache2:

# /etc/init.d/apache2 restart

6. Comprobación global
Ir al directorio donde están los documentos visibles desde web:

# cd /var/www/
Crear el archivo info.php con el siguiente contenido:

# vi info.php
<?php
phpinfo();
?>
Abrir el navegador web y escribir http://servidor.apache2.com/info.php y aparecerá la información de PHP5.

12 de 25
Curso Mentor Apache

Instalación y configuración de phpMyAdmin


Introducción

phpMyAdmin es una herramienta escrita en PHP para llevar la administración de MySQL vía web. Permite crear y eliminar BBDD, crear,
eliminar y modificar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves y privilegios, etc. Disponible
bajo la licencia GPL.
Suponemos que Apache2, MySQL y PHP5 están funcionando correctamente en el sistema.
Instalamos ahora phpMyAdmin que es una herramienta para la administración de MySQL sobre la web. Sus funciones son:

crear y borrar bases de datos
crear, copiar, borrar y modificar tablas
eliminar, editar y añadir campos
ejecutar cualquier sentencia SQL
gestión de claves
exportar e importar datos a los valores de CSV
administrar servidores y bases de datos sencillas
comprobar la integridad referencial

Instalación

Instalación de phpMyAdmin:

# apt-get install phpmyadmin
Leyendo lista de paquetes... Hecho
........................................
Paquetes recomendados
php5-mcrypt php4-mcrypt php5-gd php4-gd
Se instalarán los siguientes paquetes NUEVOS:
phpmyadmin
.........................................
Configurando phpmyadmin (2.9.1.1-2ubuntu1)

La   instalación   crea   un   enlace   simbólico   en   el   directorio /var/www/   apuntando   a phpmyadmin, que   realmente   está   instalado   en
/usr/share/phpmyadmin.

#ls -l /var/www
lrwxrwxrwx 1 root root 21 2006-05-28 09:09 phpmyadmin -> /usr/share/phpmyadmin

Ahora se debe configurar phpmyadmin para poder acceder a él mediante contraseña. Es una medida de seguridad que se debe tener en


cuenta.
Para  ello  modificamos  el  archivo  de  configuración  de phpmyadmin que  es  /etc/phpmyadmin/config.inc.php y  descomentamos
algunas de sus líneas.

# vi /etc/phpmyadmin/config.inc.php o
# gedit /etc/phpmyadmin/config.inc.php

1. Tipo de autenticación
Puede ser mediante cookies, http o entrar sin pedir contraseña (config). Por defecto la dejamos en cookie. Eliminar los caracteres '//' en la
línea siguiente:

$cfg['Servers'][$i]['auth_type'] = 'cookie';

13 de 25
Curso Mentor Apache

2. Usuario administrador
Indica qué usuario se conectará a las bases de datos. Por defecto viene el usuario root de MySQL. Se recomienda añadir otro usuario con
algunos privilegios de root, y así manejar las bases de datos con él, ya que con root puede ser peligroso. Nosotros hemos utilizado mysql.

$cfg['Servers'][$i]['user'] = 'mysql';

3. Contraseña administrador
Indica la contraseña asignada al usuario especificado en /etc/mysql/my.cnf.

$cfg['Servers'][$i]['password'] = 'contraseña';

4. Reiniciar los servicios de MySQL y Apache2

# /etc/init.d/apache2 restart
# /etc/init.d/mysql restart

5. Abrir phpMyAdmin
Ir   al   navegador   y   escribir http://servidor.apache2.com/phpmyadmin.   Una  vez   realizada  la  validación  vemos   el   interfaz   de
phpMyAdmin.
La utilización de la herramienta excede los objetivos del curso de Apache2. En cualquier caso remitimos al alumno a la página oficial de
phpMyAdmin (http://www.phpmyadmin.net/home_page/index.php) donde existe abundante información sobre el uso de esta aplicación web.

14 de 25
Curso Mentor Apache

Windows:

15 de 25
Curso Mentor Apache

Instalación MySQL (v.5.0)


Instalación

Desde http://dev.mysql.com/downloads/mysql/5.0.html#win32 descargamos el archivo mysql-essential-5.0.45-


win32.msi y procedemos a su instalación.

Seleccionamos la opción "Custom" y seleccionamos el directorio donde queremos instalarlo. Para ello pulsamos el botón
"Change" y escribimos "C:\MySQL\MySQL Server 5.0\".

Nos muestra un resumen de las opciones seleccionadas:

Comienza la instalación:

En la última pantalla nos indica si queremos ahora realizar la configuración del servidor MySQL ahora.

Continuamos con la configuración de MySQL:

Indicamos que queremos hacer la configuración detallada y que nuestra máquina será de desarrollo.

Vamos a utilizar una base de datos multifuncional.

Indicamos, aproximadamente, el número de conexiones concurrentes al servidor MySQL.

Opciones de red que dejamos con los valores por defecto:

Selección del conjunto de caracteres:

Queremos que MySQL se ejecute como un servicio más de Windows XP e incluimos el directorio bin del MySQL en el
path del sistema:

Pregunta si queremos utilizar MySQL con el usuario root asignándole una contraseña, o si queremos crear un usuario
anónimo, que es menos seguro. Si lo necesitamos marcamos la casilla permitiendo acceso desde el exterior.

16 de 25
Curso Mentor Apache

Termina la configuración.

Con estos pasos ya disponemos de MySQL instalado y configurado.


El archivo utilizado para la configuración de MySQL es my.cnf y según nuestra instalación está en C:\MySQL\MySQL
Server 5.0\.

17 de 25
Curso Mentor Apache

Instalación del soporte para PHP5


Instalación

Revisamos los pasos a seguir que ya fueron explicados en el Capítulo 8.


1. Iniciar la sesión en Windows XP como Administrador.
2. Descargar el paquete de PHP 5.2.4 (php-5.2.4-Win32) desde www.php.net. Es importante tener cuidado de NO
BAJAR el instalador ya que no hace completamente bien la instalación para Apache como servidor web, al menos y de
momento en esta versión.
3. Extraemos el archivo zip en una carpeta con un nombre como C:\PHP.
Configuración:
1. Ir a C:\PHP y seleccionar todos los archivos del tipo dll (librerías dinámicas). Ahora hay que copiarlos en
C:\WINDOWS\system32.
2. Editar el archivo C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2   \conf\httpd.conf   y
descomentamos la línea que carga el módulo correspondiente a PHP5:

LoadModule php5_module "C:/PHP/php5apache2_2.dll"

3. Ahora dentro de la sección <IfModule mime_module> añadir la línea siguiente:

<IfModule mime_module>
....................................
AddType application/x-httpd-php .php
.................................................

Con esta línea estamos diciendo que se interpreten los archivos con extensión .php (tipos mime).
4. El archivo de configuración de PHP se llama php.ini. Al instalar por defecto se crea uno llamado php.ini-dist.
Cambiar el nombre a php.ini dejándolo en el directorio donde está inicialmente.
5. En el archivo de configuración de Apache httpd.conf hemos de indicar donde debe buscar este archivo php.ini.
Añadir la siguiente línea, por ejemplo, después de la linea de LoadModule.

PHPIniDir “C:/PHP”

6. Al acceder a nuestro servidor siempre se muestra el archivo indicado en la directiva DirectoryIndex. La modificamos
para siempre cargue un archivo index.php que nosotros preparamos. La directiva debe quedar así:

DirectoryIndex index.php index.html

Sino existe un archivo index.php buscará el siguiente de la lista (index.html).


7. Creamos un archivo index.php en C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs
con el código siguiente:

<?php phpinfo(); ?>

8. Guardar los cambios del archivo httpd.conf y reiniciar el servidor Apache2. Si aparece la siguiente información es
que PHP ha sido bien instalado y está funcionando enlazado con Apache2.
9. Editar el archivo index.php y cambiar el código por este otro que dejamos como definitivo:

<p>Esta página ha sido creada a las <b>
<?php echo date("h:i:s a", time()); ?>
</b> en un ordenador con PHP5 funcionando.</p>
<html><body><h1>Servidor web</h1></body></html>

18 de 25
Curso Mentor Apache

Volver otra vez a probar en el navegador.

19 de 25
Curso Mentor Apache

Instalación de phpMyAdmin
Contenido

Descargar de la URL http://sourceforge.net/project/ el archivo phpMyAdmin-2.11.0-rc2-all-languages.zip.

Hay que extraer el archivo .zip en la carpeta raíz del servidor web C:\Archivos   de   programa\Apache   Software
Foundation\Apache2.2\htdocs.

La carpeta generada se llama phpMyAdmin-2.11.0-rc2-all-languages y le cambiamos el nombre a phpmyadmin, de


forma que quedaria algo así: C:\Archivos   de   programa\Apache   Software   Foundation\Apache2.2\htdocs
\phpmyadmin

Para la configuración de phpMyAdmin editamos (WordPad) el archivo config.inc.php. No existe como tal, pero hay
un archivo de ejemplo config.sample.inc que renombramos a config.inc.php. Buscamos las líneas:

$cfg['blowfish_secret'] = 'acegikm';

Le asignamos una cadena de caracteres cualquiera que servirá de semilla para la encriptación de contraseñas al usar
la autenticación con cookies. Salvar los cambios.
Editamos el archivo php.ini y eliminamos el ';' de la línea:

extension=php_mysql.dll

Por último copiamos el archivo libmySQL.dll que se encuentra en la ruta donde se instaló mysql (C:\MySQL\MySQL
Server 5.0\bin) y lo pegamos en C:\WINDOWS\System32.

libmySQL.dll

Reiniciamos Apache2 y MySQL. Probamos que la instalación se hizo bien yendo a http://localhost/phpmyadmin/.

20 de 25
Curso Mentor Apache

Glosario
Glosario Unidad 10

Concepto Definición

Base de Datos Conjunto de datos relacionados entre sí y almacenados en tablas que facilitan su posterior acceso.

CSV Comma Separated Values, Valores Separados por Comas. Es una forma generalizada de estructurar bases de
datos donde se utilizan comas (,) en archivos de texto para indicar cuando acaba una columna y empieza la otra.

GTK+ Es una biblioteca de rutinas para desarrollar interfaces gráficas de usuario (GUI) en entornos gráficos GNOME,
XFCE de sistemas GNU/Linux.

Lenguaje interpretado Lenguaje de programación  diseñado  para  ser  ejecutado  por  medio  de un  intérprete  que  traduce  el programa a
código fuente. También se llaman lenguajes de script.

Lenguaje alto nivel Lenguaje de programación cuyas instrucciones son similares al lenguaje humano y que necesita ser


traducido a un lenguaje de bajo nivel que el sistema pueda entender.

PHP PHP   es   un  lenguaje  de  programación  interpretado  usado  frecuentemente  para  la  creación  de  contenido  para
webs  dinámicas.   También  permite  la  creación  de  aplicaciones  con  una  interfaz  gráfica  para  el  usuario  (GUI),
utilizando extensiones para las librerías Qt o GTK.

Qt Es una biblioteca multiplataforma para desarrollar interfaces gráficas de usuario (GUI) creada por la compañía
noruega Trolltech y utilizada en KDE (entorno gráfico para sistemas GNU/Linux).

Sistema Gestor de Software específico utilizado como interfaz entre las bases de datos y las aplicaciones que las utilizan.


Bases de Datos

Tabla Conjunto de registros (tuplas) que almacenan datos homogéneos.

Otros Glosarios

Otros glosarios relacionados con la informática y el mundo web.


Se pueden visitar las webs siguientes:

ATI: dispone de un glosario completo de términos informáticos en http://www.ati.es/novatica/glosario/glosario_internet.html


Microsoft: http://msdn.microsoft.com/es-es/library/aa302380.aspx

21 de 25
Curso Mentor Apache

Fuentes de información
Documentos y enlaces de interés

1. Guía de Ubuntu: http://www.guia-ubuntu.org/index.php?title=Servidor_web


2. Página oficial de apache: http://www.apache2.es/2.2.2/

22 de 25
Curso Mentor Apache

Resumen final
Síntesis de la Unidad 10 'Instalación'

Los puntos a destacar de esta unidad son los siguientes:

1. MySQL es un Sistema Gestor de Bases de Datos Relacional (SGBDR).
2. Un Sistema de Gestión de Bases de Datos (SGBDR) es una aplicación formada por un conjunto de programas que permiten crear y
gestionar bases de datos (BBDD).
3. El archivo de configuración de MySQL /etc/mysql/my.cnf está dividido en secciones.
4. PHP es un lenguaje de programación interpretado, de alto nivel, ejecutado en el servidor y usado frecuentemente para la creación de
contenido para webs dinámicas. También permite la creación de aplicaciones con una interfaz gráfica para el usuario (GUI), utilizando
extensiones para las librerías Qt o GTK.
5. phpMyAdmin es una herramienta escrita en PHP para llevar la administración de MySQL vía web. Permite crear y eliminar BBDD,
crear, eliminar y modificar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves y privilegios,
etc. Disponible bajo la licencia GPL.

23 de 25
Curso Mentor Apache

Autoevaluación Unidad 10
Autoevaluación

El cuestionario de autoevaluación de la Unidad 10 está disponible en la plataforma Mentor (https://centrovirtual.educacion.es/).

24 de 25
Curso Mentor Apache

Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 10

25 de 25

Das könnte Ihnen auch gefallen