Este documento proporciona una introducción a Apache, el servidor web de código abierto más popular. Describe las principales versiones de Apache, sus características clave como su alta configurabilidad y extensibilidad, y cómo se puede instalar y configurar, incluida la configuración de servidores virtuales y control de acceso. El documento también explica los ficheros y directorios de configuración de Apache y las directivas de configuración más importantes.
2. 1.Introducción
Apache (www.apache.org) es una fundación que proporciona soporte a la
comunidad con un numeroso conjunto de proyectos “open source”. Es una
comunidad de desarrolladores y usuarios caracterizados por ser un grupo
colaborativo, con el deseo de crear software de alta calidad. Se pueden
encontrar proyectos como: HTTP Server, Ant, Cocoon, DB, Excalibur,
Forrest, Geronimo, Jakarta, SpamAssassin, Struts, Web Services, XML,
etc.
Uno de los principales proyectos es el HTTP Server
(http://httpd.apache.org), un servidor web “open source”. En la actualidad
es el servidor web más popular en Internet.
2.Versiones
Existen tres versiones de apache
Versión 2.2
Versión 2.0
Versión 1.3
Las tres versiones se están en desarrollo activo.
La versión 1.x está muy extendida, y aunque es posible migrar de Apache 1.x
hacia Apache 2.x , no muchas instituciones o empresas están dispuestas a
migrar toda su infraestructura de producción a una versión mayor, optando
mejor por realizar actualizaciones graduales a su versión instalada, razón
por la que Apache 1.x es desarrollado activamente aún con la presencia de
Apache 2.
La configuración de la versión 2.2 tiene cambios significativos con respecto
a las versiones 1.3 y 2.0.
3.Características
Es un servidor Web potente, flexible y ajustado al HTTP/1.1
Es altamente configurable y extensible.
Puede ser ajustado a través de la definición de módulos empleando su
propio
3. API (Aplication Programming Interface).
Provee todo su código fuente de forma libre y se distribuye bajo una
licencia no restrictiva.
Se ejecuta en diversos sistemas operativos: Windows 9x/NT, Macintosh,
Novell
NetWare, OS/2, Linux y la mayoría de los Unix existentes: IRIX, Solaris,
HP
UX, SCO, FreeBSD, NetBSD, AIX, Digital Unix, etc.
Se desarrolla de forma acelerada estimulando la retroalimentación desde
sus usuarios a través de nuevas ideas, reportes de errores y parches.
4.Servidores principal y servidores virtuales
En Apache es posible diferenciar entre
Servidor principal: Servidor que atiende las peticiones si no se
configuran servidores virtuales. Su configuración se define a nivel
general en los ficheros de configuración.
Servidores virtuales: Apache soporta servir diversos sitios web con
un sólo servidor. Para ello proporciona facilidades de creación de
servidores virtuales en función de direcciones IP, puertos y nombres
de dominio.
Si se activan los servidores virtuales por nombre para una ip
(NameVirtualHost) el servidor principal no tiene efecto para esa IP.
La configuración de cada servidor virtual se realiza utilizado la
directiva
<VirtualHost> … <VirtualHost>
5.Instalación del servidor
Instalación del servidor usado apt (ejecutarlo con privilegios de root)
apt-get install apache2
Se instala la versión 2.2 con los principales ('core') módulos habilitados
(apache2-common)
7. Ficheros y directorios de configuración
Introducción
La configuración de apache se basa en directivas que escriben en
ficheros de texto.
Para que los cambios realizados en los ficheros de configuración
tengan efecto hay que reiniciar el servidor
4. Directorio que contiene todos los ficheros de
configuración
En las distribuciones de Linux basadas en debian todos los
ficheros de configuración de Apache2 se encuentran en el
directorio /etc/apache2.
En Windows las configuración se encuentra en C:Program Files
(x86)Apache Software FoundationApache2.2conf
En la mayoría de los sistemas se utiliza un fichero denominado
httpd.conf en el que se almacenan todas las directivas de
configuración.
En las distribuciones basadas en Debian se suele utilizar como
fichero principal de configuración apache2.conf,
Ficheros de Configuración
El fichero de configuración se divide en tres secciones (las directivas
pueden aparecer mezcladas y desordenadas esta organización es a
nivel puramente organizativo, no es una división estricta)
Sección 1: Directivas globales: Define los aspectos globales del
servidor. Por ejemplo: el número máximo de clientes
concurrentes, los timeouts, el directorio raíz del servidor, etc.
Sección 2: Directivas de funcionamiento del servidor principal:
Agrupa las directivas que definen el comportamiento del servidor
principal. También definen el comportamiento por defecto de
todos los servidores virtuales que se configuren más adelante
(incluido un posible servidor virtual por defecto)
Sección 3: Directivas de configuración de los servidores
virtuales: Agrupa las directivas relacionadas con los servidores
virtuales que se definan.
Directivas
Como se ha explicado la configuración del servidor queda determinada
por un conjunto de directivas que se escriben en los ficheros de
configuración.
Dependiendo del entorno en el que se escriban determinadas
directivas de configuración, éstas afectarán al comportamiento del
servidor en general, sólo a un directorio de la raíz de documentos, a
un sitio virtual,…
Aunque la mayoría de las directivas pueden aparecer en cualquier
sección hay algunas que no tienen sentido en determinados contextos.
5. Existen directivas (Ej.:<Directory></Directory> , <Files> </Files>, …)
que actúan como contenedores de otras directivas (secciones) y
permiten configurar ámbitos del servidor concretos.
d.1. Directivas globales de funcionamiento
Son directivas que afectan al comportamiento global de Apache
o ServerRoot: Especifica el directorio raíz del servidor
donde se encuentran los:
✗ Ficheros de configuración
✗ Ficheros de logs
✗ Ficheros de error
No añadir / al final del directorio
o Listen: Especifica en qué Ip y puertos se atenderán las
peticiones. La especificación de la dirección IP es opcional
y si no se indica, o bien es un asterisco, el servidor
escuchará las peticiones de todos los interfaces de red
existentes en el servidor.
Pueden utilizarse múltiples directivas Listen para
especificar distintos interfaces de red y/o puertos.
d. 2 Directivas de configuración del
servidor/servidores virtuales:
Permiten definir el comportamiento del servidor principal por
defecto y de los servidores virtuales. Las directivas que no se
incluyan dentro de la directiva <VirtualHost> de un servidor virtual
concreto se aplican al servidor principal y a todos los servidores
virtuales donde no se especifiquen con mas detalle (dentro de la
sección definida por <VirtualHost>) .
d.2.1. DocumentRoot: Directorio raíz desde donde se sirven las
paginas web del servidor. Lo que esa “por encima” en árbol de
directorios no es visible por ningún cliente ( a no se que se configuren
Alias). Si el servidor recibe una petición (Ej.: http/localhost) buscara
en dicho directorio.
d.2.2 Directivas de sección (contenedores)
<Directory directorio/s>… </Directory>: Las directivas
encapsuladas dentro de <Directory> se aplican al directorio
especificado y a todos sus subdirectorios excepto que
existan directivas mas especificas para alguno de los
subdirectorios.
6. El directorio en el que se hacen efectivas estas directivas
debe expresarse como una ruta absoluta dentro del sistema
de ficheros.
✔ Ejemplos
<Directory />
Options FollowSymLinks
</Directory>
Indica que las directivas se aplican a todos los directorios.
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Indica que las directivas se aplican a al directorio
/var/www/ y sus subdirectorios.
<Files fichero/s > … </Files>
Las directivas encapsuladas dentro <Files> se aplican a
los ficheros especificados.
d.2.3. Opciones sobre directorios. Options
Permite indicar que características están disponibles cuando se sirve
el directorio correspondiente al cliente.
Sintaxis: Options [+|-]<opción> [+|-]<opción> ...
Ejemplo
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
</Directory>
Estas características son:
FollowSymLinks: Indica que se pueden seguir los enlaces
simbólicos presenten el directorio.
ExecCGI: Indica que se pueden ejecutar los scripts de tipo
CGI.
Includes: Indica que se permita el mecanismo SSI (Server
Side Include).
Indexes: Indica que si el cliente solicita un directorio
donde no exista ninguno de los ficheros especificados en
DirectoryIndex se le devuelva una lista con formato del
contenido del directorio.
7. SymLinksIfOwnerMatch Indica que se sigan los enlaces
simbólicos solo si el fichero o directorio enlazado posee el
mismo dueño que el enlace.
IncludeNoExec: Es similar a Includes con la diferencia de
que no se permiten los comandos SSI include y exec para
programas CGI.
MultiViews: Indica que se “negocie'' entre el servidor y el
cliente el documento a mostrar cuando existen varias
posibilidades.
Por ejemplo, si se solicita el documento /images/map y
existe el directorio images con la opción habilitada pero no
existe /images/map, entonces el servidor busca todos los
documentos con nombre map.* y “negocia'' con el cliente
cual de estos, de existir alguno, retorna al cliente.
None: Ninguna funcionalidad está activa.
All: Incluye todas las opciones con excepción de
MultiViews. Este es el valor por defecto.
Cuando varias directivas Option son aplicables a un directorio se
toma la más específica, o sea no se mezclan salvo que estas se
indiquen precedidas por un + o un -, en cuyo caso se añade la opción o
se elimina respectivamente.
Por ejemplo en la declaración siguiente:
<Directory /var/www/html/documents>
Options Indexes FollowSymLinks
</Directory>
<Directory /var/www/html/documents/linux>
Options Includes ExecCGI
</Directory>
Las opciones aplicadas al directorio /var/www/html/documents/Linux
son solamente: Includes y ExecCGI.
<Directory /var/www/html/documents>
Options Indexes FollowSymLinks
</Directory>
<Directory /var/www/html/documents/linux>
Options +Includes +ExecCGI -FollowSymLinks
</Directory>
Las opciones aplicadas al directorio /var/www/html/documents/Linux
serían: Indexes, Includes y ExecCGI.
8. d.2.4. Directorios Virtuales
Los directorios virtuales son directorios que no cuelgan del directorio
raíz (DocumentRoot) del servidor
Se utiliza la directiva Alias que permite hacer alias para ficheros o
directorios a través de un URL.
Tiene que estar activo el modulo mod_alias (por defecto lo está en
Debian/Ubuntu)
De esta forma se puede acceder a recursos fuera del directorio raíz
( DocumentRoot).
Sintaxis es la siguiente: Alias url directorio|fichero.
d.2.5.ErrorLog: Especifica el fichero donde se escriben las trazas
de error del servidor.
Sintaxis: ErrorLog <fichero> | <tubería> | syslog[:facilidad]
En Debian/Ubuntu por defecto por defecto
/var/log/apache2/error.log
Si el argumento de la directiva comienza con un carácter “|''
expresará que las envidas por una tubería al comando siguiente.
Se puede expresar que se use el servicio syslog.
d.2.6 LogLevel: Indica a partir de que prioridad se guardan las
trazas
Sintaxis: LogLevel <prioridad>
Las prioridades son las mismas definidas en el servicio syslog:
emerg: Sólo se registran las emergencias
crit: Sólo se registran los problemas críticos.
alert: Se registra cualquier situación que genera
una alerta.
error: Todos los errores son registrados. Este es
el nivel predeterminado.
warn: Todos los errores y avisos son registrados
notice: Cualquier situación significativa es
registrada
info: Se registra toda la información relativa al
servidor.
debug: Los mensajes de depuración son
registrados.
Siempre una prioridad incluye a las superiores. Por
defecto en Debian/Ubuntu , se indica la prioridad warn.
d.2.7 DirectoryIndex: Ficheros a servir por defecto :
9. Especifica el fichero que se servirá por defecto para cada
directorio en el caso de que no se especifique ninguno en la
URL.
Por defecto es index.html.
Si por ejemplo se pone en el navegador: www.instituto.es el
servidor por defecto enviará www.instituto.es/index.html.
Se puede especificar más de un fichero y el orden con el que
se especifica dicho nombre determinará la prioridad para
decidir cuál se sirve.
Cuando no se encuentra ninguna de las páginas de inicio
especificadas, Apache crea de manera automática la página de
examen de directorio, si se encuentra activa la opción Indexes.
El examen de directorios consiste en un listado de las carpetas
ficheros del directorio pedido.
Control de acceso a páginas del servidor
e.1.Control de acceso por IP
Es posible definir que IPs pueden acceder a un recurso del servidor
utilizando las directivas que se especifican a continuación dentro de
secciones Directory, File, Location, ficheros .htaccess, etc. Cuando se
realiza la conexión desde la máquina el servidor comprueba si el
acceso al recurso está autorizado para es IP. Si está autorizada
devuelve el recurso solicitado y si no está autorizada devuelve un
código de error (Acceso no autorizado).
Allow: Permite especificar quién está autorizado a acceder al
recurso.Se pueden especificar direcciones IP, nombres de
máquina, fragmentos del nombre o dirección e incluso por
variables de la petición.
All para indicar todos los clientes.
✔ Ejemplos
Allow from pruebas.instituto.es
Allow from 147.156.222.34 147.156.222.65
Deny: Permite especificar quién no está autorizado para
acceder al recurso. Mismas opciones que con Allow.
✔ Ejemplos
Deny from seguridad.instituto.es
Deny from 147.156.222.34 147.156.222.65
Deny from all
10. Order: Permite afinar el funcionamiento de las directivas
Allow y Deny. Dos opciones:
Order Allow, Deny
El acceso esta denegado por defecto.
Primero se evalúan las directivas Allow y luego las Deny
Sólo podrán entrar los clientes que cumplan las
especificaciones de Allow y no cumplan las de Deny.
Order Deny, Allow
El acceso está permitido por defecto.
Primero se evalúan las directivas Deny y luego las Allow.
El acceso está permitido por defecto y sólo podrán entrar
los clientes que no cumplan las especificaciones de Deny o
cumplan las de Allow.
e.2 Control básico de acceso por usuario y contraseña
(autenticación)
Apache puede autorizar el acceso a los recursos en función de usuario
que los solicite. Para ello realiza un proceso de autenticación.
Cuando un cliente solicita una URL que requiere autenticación, el
servidor responde con un mensaje de autenticación requerida.
El navegador mostrará un cuadro de diálogo para que se introduzca el
nombre de usuario y contraseña.
El servidor chequea si las credenciales son correctas
Si lo son devuelve el recurso solicitado
Si no lo son o el usuario no tiene acceso al recurso devuelve un código
de error (Acceso no autorizado).
Apache soporta varios modos de autenticación:
Básica (mod_auth)
La contraseña es enviada por el cliente en texto plano.
Para gestionarlas se utiliza el programa htpasswd.
Digest (mod_auth_digest)
La contraseña se envía cifrada por el cliente.
Para gestionarlas se utiliza el programa htdigest.
DBM (mod_auth_dbm).
Las contraseñas se almacenan en una base de datos en ficheros BM.
Para gestionarlas se utiliza el programa dbmmanage.
También permite almacenar los usuarios y contraseñas en (con los
módulos apropiados) en:
✔ Servidores LDAP
✔ Servidores de bases de datos (Oracle, MySQL, Postgres, etc.).
11. Configuración para realizar una autenticación básica por usuario y
contraseña.
Crear un fichero en el servidor donde se almacenarán los nombres de
usuarios y contraseñas utilizando el comando htpasswd.
Configurar las directivas en el recurso que se quiera proteger, incluyéndolas
en una sección (<Directory>, <File>, …)
Las principales directivas de configuración son;
➢ AuthUserFile
Sintaxis: AuthUserFile <fichero>
Permite especificar el nombre del fichero con los nombres de usuarios y
contraseñas
Se modifica utilizando el comando htpasswd
➢ AuthType
Sintaxis: AuthType Basic|Digest
Define el sistema de autentificación utilizado.
Puede ser Basic o Digest.
➢ AuthName
✔ Sintaxis: AuthName <nombre>
Define un nombre para la zona protegida.
Una vez que un usuario introduzca unas credenciales válidas para esta zona,
cualquier otro recurso dentro de esta zona podrá ser accedido con las
mismas credenciales.
Este nombre aparecerá en la ventana de autentificación donde el usuario
tiene que introducir su nombre de usuario y contraseña.
12. ➢Require
✔ Sintaxis:
✗ Require user usuario1 [...usuarioN]
✗ Require validuser
Especifica qué usuarios y/o grupos de los que se autentiquen correctamente
tendrán acceso al recurso.
Para referirse a todos los usuarios se podrá emplear la cadena validuser.
8 Configuración de módulos
Apache es un servidor modular. Esto supone que en el núcleo del servidor
sólo está incluida la funcionalidad más básica.
Las características extendidas están disponibles a través de módulos que
se pueden cargar en Apache.
Un módulo es una manera de agrupar ciertas funcionalidades del servidor.
Una de las principales razones de emplear módulos en Apache, es que no
toda instalación requiere de las mismas funcionalidades. Si fueran incluidas
todas las funcionalidades posibles en una versión única de Apache, sería
sumamente pesado en cuanto a requerimientos de memoria y espacio en
disco.
Existen múltiples módulos de apache que ofrecen múltiples funcionalidades
✔ http://modules.apache.org/
✔ http://httpd.apache.org/docs/2.2/mod/
Cada módulo ofrece un conjunto de directivas para configurar las
funcionalidades que ofrece.
Ejemplos
mod_access: Permite control de acceso basado en
diferentes características (hostname, IP, tipo de cliente...).
Proporciona las directivas Allow, Deny, Order.
mod_alias: Permite el mapeo entre URL's y directorios en
el sistema de ficheros.
Proporciona las directivas Alias, AliasMatch, Redirect,
RedirectMatch, RedirectPermanent, RedirectTemp,
ScriptAlias, ScriptAliasMatch.
mod_auth: ✗ Permite autenticación de usuarios usando
ficheros de texto.
Proporciona las directivas AuthAuthoritative,
AuthGroupFile, AuthUserFile.
13. Existen dos tipos de módulos
Los que se compilan de forma "estática" cada vez que se
compila Apache2.
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.
De forma predeterminada, durante la compilación se incluye un juego básico
de módulos en el servidor.
Si el servidor se compila para que use módulos cargables
dinámicamente (DSO), los módulos se podrán compilar por separado y
se podrán añadir posteriormente usando la directiva LoadModule.
En caso contrario, habrá que recompilar Apache para añadir o quitar
módulos.
Debian/Ubuntu compila Apache2 para que permita la carga
dinámica de módulos.
Es posible instalar módulos adicionales usando apt-get.
Las directivas específicas de los módulos se incluyen dentro de la directiva
contenedora <IfModule nombremodulo> </IfModule>
8.1 Configuración de módulos
8.1.1Directivas
Load module
Indican al servidor los módulos opcionales y no compilados en su
interior que deben incluirse para proporcionar más opciones de
funcionamiento.
Se pueden utilizar tantas directivas LoadModule como módulos se
quieran cargar.
LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
9. Ficheros de configuración personalizada de
directorios (.htaccess)
Para permitir una configuración personalizada de cada directorio apache
permite incluir ficheros especiales dentro del árbol de directorios del sitio web.
14. Estos archivos suelen denominarse .htaccess (ese nombre no es obligatorio,
y puede modificarse cambiando el valor en la directiva AccessFileName).
Las directivas presentes en los ficheros .htaccess tendrán efecto sobre el
directorio en el que se encuentre el fichero y todos sus subdirectorios.
Cada vez que se produce una petición el servidor busca los archivos que
tengan alguno de los nombres especificados en AccessFileName en el path
del documento que ha solicitado el visitante Como estos ficheros se leen en
cada petición, los cambios establecidos se aplicarán inmediatamente.
Para que que tengan efecto tiene que estar habilitados en servidor con la
directiva AllowOverride.
9.1 AccessFileName.
Indica los nombres de los ficheros donde se pueden colocar las directivas
que describen el acceso a un directorio determinado.
Estos ficheros pueden pertenecer al directorio correspondiente o a los
directorios que forman su path.
Siempre se utilizará el primero de los especificados que aparezca en cada
uno de los directorios de la jerarquía.
Por defecto el valor de esta directiva se refiere a un fichero con nombre
.htaccess.
✔ Ejemplo:
✗ Para acceder al documento /var/www/html/manual/index.html se leerán
en orden los siguientes ficheros:
/.htaccess,
/var/.htaccess,
/var/www/.htaccess,
/var/www/html/.htaccess
/var/www/html/manual/.htaccess
De los que existan se tomarán las restricciones.
AccessFileName .htaccess
9.2. AllowOverride
Indica que directivas presentes en un fichero especificado en
AccessFileName sobrescriben el valor de las encontradas en el fichero de
configuración principal.
✔ Los valores que puede tomar son:
15. All y None: Indican que se sobrescriban todas las directivas o que no se
sobrescriba ninguna.
Options: Permite que se sobrescriba la directiva Options.
Indexes: Permite que se sobrescriban todas las directivas relacionadas con
la indexación de los directorios (Ej. AddDescription, AddIcon,
AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex,
FancyIndexing, HeaderName, IndexIgnore, IndexOptions,
ReadmeName, etc.)
Limit: Permite la sobrescritura de directivas que controlan el acceso por
máquina (Order, Allow y Deny).
AuthConfig: Permite el uso de directivas que controlan el acceso por
autenticación
(Ej. AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile,
AuthName, AuthType, AuthUserFile, Require, etc.).
FileInfo: Permite la sobrescritura de las directivas que controlan el tipo de
documentos (Ej. AddEncoding, AddLanguage, AddType, DefaultType,
ErrorDocument, LanguagePriority, etc.).