Cibernetia > Manuales > Introducción a los servidores web > Configuración de Apache
Búsqueda personalizada




Configuración de Apache

Cuando se ha instalado el servidor, hay que configurarlo. Apache incluye por defecto una configuración que arranca el servidor en el puerto TCP por defecto, que es el puerto 80, y sirve los ficheros del directorio que se ha especificado mediante la directiva de configuración denominada DocumentRoot. Este fichero de configuración de Apache es el httpd.conf, localizado en el subdirectorio "conf" dentro del directorio de instalación. httpd.conf es un fichero de tipo ASCII que contiene las directivas de configuración.

Estructura del fichero de configuración httpd.conf

httpd.conf está compuesto por tres bloques fundamentales, aunque las directivas de cada uno de los bloque pueden aparecer desordenadas o mezcladas.

Estos bloques son:

  • Parámetros globales
  • Directivas de funcionamiento
  • Hosts virtuales

Algunos parámetros son propósito general, y otros son configurables de forma independiente para cada conjunto de directorios o de ficheros o incluso para un servidor virtual específico. En tales casos, estos parámetros se encuentran dentro de secciones en las que se indica el contexto de aplicación de dicho parámetro. Las secciones fundamentales son:

<Directory>: los parámetros que se encuentran dentro de la sección Directory sólo se aplican al directorio indicado y sus subdirectorios.

<DirectoryMatch>: igual que Directory, aunque acepta expresiones regulares en el nombre del directorio.

<Files>: los parámetros de configuración facilitan control de acceso a los ficheros mediante su nombre.

<FilesMatch>: igual que Files, pero acepta en el nombre del fichero expresiones regulares.

<Location>: proporciona control de acceso a los ficheros mediante la URL.

<LocationMatch>: igual que Location, pero acepta en el nombre del fichero el uso de expresiones regulares.

<VirtualHost>: los parámetros sólo se aplican a aquellas peticiones dirigidas a este host (nombre de servidor, dirección IP o puerto TCP).

<Proxy>: sólo se aplican estos parámetros a aquellas peticiones de proxy (requiere que esté instalado "mod proxy") coincidentes con la especificación de URL.

<ProxyMatch>: igual que proxy, pero acepta en la URL indicada el uso de expresiones regulares.

<IfDefine>: sólo se aplica si al arrancar el servidor existe un parámetro concreto definido en la línea de comandos, mediante la opción -D.

<IfModule>: se aplican los parámetros si el módulo especificado se encuentra cargado (mediante LoadModule) en el momento de arrancar el servidor .

En caso de que exista conflicto entre diferentes especificaciones de parámetros, el orden de precedencia es:

  1. <Directory> y .htaccess
  2. <DirectoryMatch> y <Directory>
  3. <Files> y <FilesMatch>
  4. <Location> y <LocationMatch>

En cuanto a <VirtualHost>, estas directivas siempre se aplican siempre después de las directivas generales. De este modo, un VirtualHost puede modificar la configuración por defecto.

Un ejemplo de configuración:

<Directory /home/*/public_html>
  Options Indexes
</Directory>
<FilesMatch \.(?i:gif jpe?g png)$>
  Order allow,deny
  Deny from all
</FilesMatch>.

Directivas globales de configuración

Algunas directivas de configuración nunca se aplican a las secciones antes mencionadas (directorios, etc.), sino que afectan al conjunto del servidor web. Las más destacables son:

ServerRoot: especifica la localización del directorio raíz en el que se encuentra instalado el servidor web. Partiendo de este directorio, se encuentran los ficheros de configuración, etc. Si la instalación del servidor es correcta, no debería modificarse nunca.

KeepAlive: especifica si se deben utilizar conexiones persistentes para atender las peticiones de un mismo usuario mediante la misma conexión TCP.

Listen: especifica el puerto en que se atenderán las peticiones. Por defecto el servidor "escucha" en el puerto 80 de TCP. Permite especificar las direcciones IP que se utilizarán (en caso de que el servidor tuviese más de una). Por defecto se utilizarán todas las disponibles.

LoadModule: Permite cargar en el servidor los módulos adicionales de Apache. La sintaxis es:

LoadModule modulo ficheromodulo

Se debe tener instalado mod_so para poder utilizarla.

Directivas principales

Hay algunas directivas que, generalmente, no suelen aparecer en las secciones anteriormente mencionadas (algunas de ellas no deben estar en ninguna sección, y es obligatorio que aparezcan en la sección principal), sino que se encuentran en la sección principal. Estas directivas son:

ServerAdmin: especifica la dirección de correo electrónico del administrador. Esta dirección puede mostrarse en los mensajes de error a modo de dirección de contacto para que los usuarios notifiquen el error al administrador. No debe estar dentro de ninguna sección.

ServerName: sirve para especificar el nombre y el puerto TCP que el Apache utiliza para identificarse. Se puede determinar de forma automática, pero se recomienda especificarlo. Si el servidor no tuviera un nombre DNS, es recomendable incluir su dirección IP. No debe incluirse dentro de ninguna sección. Su sintaxis es: ServerName nombredireccion:puerto

como en:
ServerName www.uoc.edu:80
ServerName 192.168.1.1:80

DocumentRoot: directorio raíz desde el cual se servirán los documentos. Por defecto es "htdocs", dentro de la carpeta de instalación de Apache. No debe aparecer dentro de ninguna sección, a excepción de la sección VirtualHost. Le corresponde una sección <Directory> en la cual se marcan los parámetros de configuración de este directorio.

DirectoryIndex: especifica el fichero que Apache servirá por defecto para cada directorio en caso de que no se especifique ningún fichero concreto en la URL de la petición. Por defecto es "index.html". Es decir, si se solicita en la barra de direcciones del navegador: www.cibernetia.com el servidor enviará por defecto www.cibernetia.com/index.html. Es posible especificar más de un fichero y el orden con que se especifican los ficheros determinará la prioridad para determinar cuál se debe servir. Es posible encontrar la directiva fuera de cualquier sección o dentro de alguna de ellas.

AccessFileName: determina el fichero de configuración en caso de que éste no sea .htaccess. Para que esta configuración cumpla su cometido, la directiva AllowOverride debe tener un valor adecuado. No puede estar incluida en ninguna sección. El fichero por defecto es .htaccess.

ErrorDocument: esta directiva establece el comportamiento de Apache en caso de error. Existen 4 configuraciones distintas:

  • Mostrar algún texto de error.
  • Redirección hacia un fichero en el mismo directorio.
  • Redirección hacia un fichero en nuestro servidor.
  • Redirección hacia un fichero fuera de nuestro servidor.

La sintaxis es ErrorDocument código_error acción.

Es posible encontrar esta directiva tanto dentro de una sección, como en la configuración global.

Por ejemplo:

ErrorDocument 404 /noencont.html.

En caso de que Apache no encuentre un fichero, se mostrará el fichero noencont.html.

Alias: las directivas Alias y AliasMatch permiten la definición de accesos a directorios que están fuera del DocumentRoot. Su sintaxis es: Alias url directorio. Por ejemplo:

Alias /docs /home/documentos

hará que una petición a http://www.uoc.edu/docs/manual se sirva desde /home/documentos/manual.

UserDir: permite indicar a Apache que un subdirectorio dentro del directorio de trabajo de los diferentes usuarios del sistema sirva para que estos almacenen su página personal.

Por ejemplo:

UserDir publico

hará que la página almacenada en el directorio del usuario "test", dentro del subdirectorio "público", sea accesible como:

http://www.uoc.edu/~test/indice.html

Directivas de sección

Casi todas las secciones de localización (Directory, Location, etc.) incluyen una serie de directivas en su configuración que permiten controlar el acceso al contenido. El módulo mod_access facilita estas directivas.

Allow: permite especificar quién tiene autorización para acceder a un recurso. Se pueden especificar direcciones IP, nombres de máquina, fragmentos del nombre o de la dirección o variables de la petición. Existe la palabra clave "all" que indica "todos los clientes".

Deny: permite especificar a quién no permitimos el acceso a un recurso. Cuenta con las mismas opciones que Allow.

Order: permite afinar el funcionamiento de las anteriores directivas: Allow y Deny. Existen 2 opciones:

  • Allow,Deny. Por defecto se deniega el acceso y sólo podrán acceder quellos clientes que cumplan las especificaciones de Allow y en cambio no cumplan las especificaciones de Deny.
  • Deny,Allow. Por defecto se permite el acceso y sólo podrán entrar los clientes que no cumplan las especificaciones de Deny o sí cumplan las especificaciones de Allow.

Servidores virtuales

Apache permite servir varios sitios web con un único servidor. Para ello permite la creación de dominios virtuales en función de diferentes direcciones IP o diferentes nombres por IP. Apache fue de los primeros servidores que soportó servidores virtuales sin necesidad de distinguir por IP, sino en función de nombre. Esta capacidad simplifica enormemente la administración de los servidores, y supone un ahorro de direcciones IP, que normalmente son escasas. Los servidores virtuales que distinguen en función del nombre son perfectamente transparentes para el cliente, con la posible excepción de aquellos navegadores muy antiguos que no envíen la cabecera "Host:" con cada petición.

Servidores virtuales por dirección IP

Para atender a varios servidores virtuales, cada uno de ellos con una dirección IP diferente, se utiliza la sección de configuración VirtualHost. Con esta sección se define una configuración y dirección IP para cada uno de los servidores.

Un ejemplo sería el siguiente.

<VirtualHost 192.168.1.1>   ServerAdmin webmaster@uoc.edu
  DocumentRoot /web/uoc
  ServerName www.uoc.edu
  ErrorLog /web/logs/uoc_error_log
  TransferLog /web/logs/uoc_access_log
</VirtualHost>
<VirtualHost 192.168.254.254>
  ServerAdmin webmaster@asociados.uoc.edu
  DocumentRoot /web/asociados
  ServerName asociados.uoc.edu
  ErrorLog /web/logs/asociados_error_log
  TransferLog /web/logs/asociados_access_log
</VirtualHost>

este ejemplo define 2 servidores web, cada uno de ellos con una IP y un nombre diferentes. Ambos tienen su propio DocumentRoot, etc.

Para hacer uso de servidores virtuales por IP, se necesita que el sistema servidor tenga configuradas en su sistema operativo las diferentes direcciones IP que debe servir.

Servidores virtuales por nombre

Para atender a varios servidores, utilizando una misma dirección IP para todos ellos, se utiliza la sección VirtualHost, que permite definir los parámetros de cada uno de los servidores. Sirva como ejemplo la siguiente configuración:

NameVirtualHost *:80
  <VirtualHost *:80>
    ServerAdmin webmaster@uoc.edu
    ServerName www.uoc.edu
    DocumentRoot /web/uoc
    ErrorLog /web/logs/uoc_error_log
    TransferLog /web/logs/uoc_access_log
  </VirtualHost>
  <VirtualHost *:80>
    ServerAdmin webmaster@uoc.edu
    ServerName asociados.uoc.edu
    DocumentRoot /web/asociados
    ErrorLog /web/logs/asociados_error_log
    TransferLog /web/logs/asociados_access_log
  </VirtualHost>.

Se puede utilizar una dirección IP concreta en lugar de *, lo cual permite asignar, por ejemplo, un grupo de servidores virtuales por nombre a esta IP y otro grupo a otra IP.

Cuando nuestro servidor tiene 2 direcciones IP, pero hemos asignado a las 2 el mismo nombre, se necesita un uso especial de las directivas de servidores por nombre. Por ejemplo, cuando se dispone una conexión de red en la intranet y otra conexión diferente en Internet con el mismo nombre, caso en el cual podemos servir el mismo contenido de la esta forma:

  NameVirtualHost 192.168.1.1
  NameVirtualHost 172.40.30.40
  <VirtualHost 192.168.1.1 172.40.30.40>
    DocumentRoot /www/servidor1
    ServerName servidor.uoc.edu
    ServerAlias servidor
</VirtualHost>

Con esta configuración se puede servir la misma web hacia la intranet y hacia la Internet. Es conveniente señalar el uso de un alias para el servidor, lo cual permite no tener que usar dominios en la intranet. Disponemos de una especificación de servidor virtual por defecto "_default_" que permite atender las peticiones que no sirve ningún otro servidor virtual.

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

Podemos usar la etiqueta "_default_" indicando un número de puerto para especificar servidores por defecto que sean diferentes para cada puerto. Apache permite también configuraciones más complejas de servidores virtuales, muy útiles en casos de, por ejemplo, servidores masivos. Una excelente guía de referencia se encuentra en la web del proyecto Apache, con consejos útiles para configurar el servidor. Existen muchos servidores HTTP de código libre, pero la mayoría de ellos han quedado eclipsados por Apache. Algunos de estos servidores tienen características que les hacen especialmente interesantes.

Los manuales titulados Introducción a las aplicaciones web, Instalación del servidor web y Servicios web han sido extraídos, con algunas modificaciones, del manual "Desarrollo de aplicaciones web", publicado por la UOC dentro de su máster de software libre, escrito por Carles Mateu i Piñol.

El manual tiene licencia GFDL, la cual otorga permiso para copiar, distribuir y modificar el documento según los términos de la GNU Free Documentation License, Version 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera.

Se puede acceder al documento original en: http://www.uoc.edu/masters/esp/img/873.pdf (versión imprimible) y http://www.uoc.edu/masters/esp/img/692.zip (versión editable, formato zip).

Manuales | Tesis: Ordenadores, Circuitos integrados...
english
Cibernetia