Apache

Servidor Web Apache

El servidor web Apache se basa en el originar servidor web NCSA, al que ha sustituido prácticamente en su totalidad

El servidor Web Apache se configura mediante un fichero de texto que contiene las directivas que le indican las instrucciones sobre como tiene que ser su comportamiento. Normalmente cada distribución de Apache trae un fichero de configuración en el que los cambios que tendremos que realizar son mínimos

Se puede encotrar un información detallada en sobre las directivas en http://httpd.apache.org/docs-2.0/

La configuración se especifica en el fichero httpd.conf que está formado por directivas de configuración y línea de comentario que comienzan por un #. Los ficheros de configuración de Apache contienen una directiva por línea. Se puede usar "\" al final de una línea para indicar que una directiva continua en la próxima línea. No puede haber otros caracteres o espacio en blanco entre el carácter "\" y el fin de la línea. No se pueden incluir comentarios en una línea, después de una directiva de configuración. Los espacios y líneas en blanco antes de una directiva de configuración se ignoran, de manera que se puede dejar una sangría en las directivas para mayor claridad.


Módulos

Apache es un servidor modular. Esto implica que en el servidor básico se incluyen únicamente las funcionalidades más básicas. Otras funcionalidades se encuentran disponibles a través de módulos que pueden ser cargados por Apache. Por defecto, durante la compilación se incluye en el servidor un juego de módulos base. Si el servidor se compila para usar carga dinámica de módulos, entonces los módulos pueden ser compilados por separado, e incluidos en cualquier momento usando la directiva LoadModule. En caso contrario, Apache deberá ser recompilado para agregar o eliminar módulos. La directivas de configuración se pueden incluir de forma condicional dependiendo de la presencia de un módulo particular, poniéndolas dentro de un bloque <IfModule> como vermos más adelante.

Secciones

Las directivas que se pongan en los ficheros principales de configuración se aplicarán a todo el servidor. Si usted quiere cambiar únicamente la configuración de una parte del servidor, puede cambiar el rango de acción de las directivas poniéndolas dentro de las secciones <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>, <Location>, y <LocationMatch> . Estas secciones limitan el dominio de aplicación de las directivas dentro de ellas, a locales particulares dentro del sistema de ficheros o URL's particulares. Estas secciones pueden ser anidadas, para permitir un grado de selección más fino.

Apache tiene la capacidad de servir varios sitios web diferentes al mismo tiempo. Esto se llama Hospedaje Virtual (en inglés Virtual Hosting). El dominio de aplicación de las directivas también puede ser delimitado poniéndolas dentro de <VirtualHost>, de manera que solo tendrán efecto para pedidos de un sitio web en particular.

Las directivas de configuración se agrupan en tres secciones básicas:

Directivas que controlan la forma de operación del procesor servidor Apache como un todo, es decir, el entorno global.

Directivas que definen los parámetros del servidor principal o predeterminado que responde a las peticiones que no gestiona ningún 'virtual host'. Entendemos por 'virtual host' un subservidor con unas características propias. Más adelante se describirá con detalle qué es un host virtual. Estas directivas también se aplican a los servidores virtuales como valores predeterminados si esto no especifican un valor propio específico del host virtual.

Directivas de configuración para host virtuales, que permiten peticiones Web a distintas direcciones IP o nombres de host y que se gestionan por el el mismo proceso servidor Apache.


Ficheros de registro y configuración

Si los nombres de ficheros que indica para los distintos controles, como registro de acceso o errores, por ejemplo, comienzan por "/" (o "unidad:/" para Win32), el servdor utilizará esa ruta absoluta. Si el nombre de fichero no empieza por "/", se le antepone el valor de la directiva ServerRoot. Por ejemplo "logs/foo.log" con la directiva ServerRoot puesta como "/etc/httpd" el servidor la interpretará como "/etc/httpd/logs/foo.log".


Configuración descentralizada

Apache permite una administración descentralizada de la configuración, a través de ficheros colocados dentro del árbol de páginas web. Los ficheros especiales se llaman normalmente .htaccess, pero se puede especificar cualquier otro nombre en la directiva AccessFileName. Las directivas que se pongan dentro de los ficheros .htaccess se aplicarán únicamente al directorio donde esté el fichero, y a todos sus subdirectorios. Los ficheros .htaccess siguen las mismas reglas de sintaxis que los ficheros principales de configuración. Como los ficheros .htaccess se leen cada vez que hay una petición de páginas, los cambios en estos ficheros comienzan a actuar inmediatamente.

Para ver qué directivas se pueden poner en los ficheros .htaccess, consulte el contexto de cada directiva. El administrador del servidor pueden controlar aún más qué directivas son permitidas en los ficheros .htaccess, configurando la directiva AllowOverride en los ficheros principales de configuración.

Servidor principal

Las directivas de esta sección definen los valores del serviode web principal, el que responde a cualquier petición que no sea atendida por ningún host virtual. Estas directivas también se aplican a los servidores virtuales como valores predeterminados si esto no especifican un valor propio específico del host virtual, com ya habíamos comentado.

Algunas de estas directivas dependen de módulos DSO.



User

Esta directiva especifica qué usuario es el que ejecuta los procesos del servidor web y en consecuencia los permisos de lectura y escritura que se aplican sobre los recursos.

User apache

El servidor soló podrá servir ficheros o directorios que tenga permiso de lectura en usuario indicado, en este caso "apache".



Group

Esta directiva especifica qué grupo es el que ejecuta los procesos del servidor web y en consecuencia los permisos de lectura y escritura que se aplican sobre los recursos.

Group apache



ServerAdmin

ServerAdmin especifica la dirección de correo a la que se deben enviar los problemas de uso del servidor Web. Esta dirección aparece en ciertas páginas de error, como por ejemplo cuando se solicita una página errónea.

ServerAdmin Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.



ServerName

ServerName especifica el nombre y el puerto que el servidor utiliza para identificarse. Con una correcta configuración, este valor se puede determinar automáticamente, pero es recomendable especificarlo explíciatamente para evitar problemas durante el arranque.

Si no se pone un nombre DNS válido, no funcionarán las redirecciones generadas por el servidor. Ver UseCanonicalName.

Si no existe un nombre DNS registrado entonces deberemos poner la dirección IP. El acceso mediante IP siempre es posible, pero además funcionarán las redirecciones.

ServerName www.iesbezmilian.org 80

Esta directiva tendremos que modificarla en el fichero inicial de configuración. Esta directiva también tendremos que incluirla en los VirtualHost que descibimos más adelante.



UseCanonicalName

UseCanonicalName determina como Apache construye las autoreferencias de URL y las variables SERVER_NAME y SERVER_PORT.

Cuando está como "Off", Apache usará los valores suministrados por el cliente. Cuando está como "On", Apache usará la directiva ServerName.

UseCanonicalName Off



DocumentRoot

DocumentRoot indica el directorio donde se almacenan los documentos web.

Existe la posibilidad de utilizar enlaces simbólicos dentro del DocumentRoot.

DocumentRoot "/var/www/html"

Esta directiva tendremos que modificarla en el fichero inicial de configuración si queremos ubicar las páginas en un directorio distinto al predeterminado.



Options

Options indica varias posibles opciones de comportamiento. Se pueden aplicar a un directorio concreto. El formato es:

Options [+|-]option [[+|-]option] ...

donde un "+" añade la opción y un "-" quita la opción. Ciertas opciones pueden depender de algún módulo DSO.

Las opciones que tenemos son:

  • All todas las opciones salvo MultiViews. Es el valor predeterminado

  • ExecCGI Se permite la ejecución de scripts CGI.

  • FollowSymLinks el servidor seguirá los enlaces simbólicos. Tener esta opción activa aumenta el rendimiento ya que el servidor no comprueba si un fichero o directorio es un enlace simbólico y es má rápido, pero en algunos casos puede presentar problemas de inseguridad.

  • Includes se permiten incluir Server-side.

  • IncludesNOEXEC se permiten incluir Server-side pero se deshabilitan las órdenes #exec y #exec CGI.

  • Indexes Si una URL solicita un directorio y no existe DirectoryIndex (v.g., index.html) en ese directorio, el servidor devolverá una lista del contenido del directorio.

  • MultiViews se permiten mostrar contenido negociado en funcion de diversos valores.

  • SymLinksIfOwnerMatch Se sigue un enlace simbólico sólo si los propietarios del enlace y del destino coinciden.

Ejemplos:


<Directory /web/docs>
 Options Indexes FollowSymLinks
 </Directory>
 <Directory /web/docs/spec>
 Options Includes
 </Directory> 

En este caso sólo se activará Includes para el directorio /web/docs/spec. Sin embargo si las directivas usan + y - :

<Directory /web/docs>


 Options Indexes FollowSymLinks
 </Directory>
 <Directory /web/docs/spec>
 Options +Includes -Indexes
 </Directory>

entonces se activan las opciones FollowSymLinks e Includes para el directorio /web/docs/spec.



UserDir

UserDir indica el directorio que se añade al directorio personal de los usuarios para servior páginas cuando se realiza una peticion del tipo ~usuario.

El directorio tiene que estar accesible (755) para el usuario que ejecuta el proceso apache, también apache como indicamos anteriormente en la directiva User. Si no tiene permisos se generará un mensaje "403 Forbidden".

UserDir podrá tener el valor "disable" para no activar los directorio personales o indicar un nombre de directorio "public_html" por ejemplo.

Para desactivar web en directorio personales:

UserDir disable

Para activar directorios personales

UserDir public_html

en este caso, si en un navegador ponemos "http://www.miservidor.dom/~julia"

el contenido que aparece debe corresponder al directorio /home/julia/public_html, suponiendo que el directorio personal del usuario julia es /home/julia.

Esta directiva depende del módulo mod_userdir.c, por lo que es habitual poner esta directiva en el fichero de configuración como:


<IfModule mod_userdir.c>
    UserDir disable
   #UserDir public_html
</IfModule>

También se puede especificar directorios UserDir de forma limitada:

UserDir disabled

UserDir enabled user1 user2 user3

o bien:

UserDir enabled

UserDir disabled user4 user5 user6



DirectoryIndex

DirectoryIndex indica como responde el servidor cuando se solicita un directorio. Lo habitual es que que haya una página que se cargue automáticamente. Ver también Option Indexes.

Por ejemplo:

DirectoryIndex index.php index.html indice.html index.html.var

Es posible aplicar esta directiva a directorios individuales para indicar índices distintos. Por ejemplo:


<Directory /var/www/html/varios>
DirectoryIndex pagina.html
</directory>

haría que al solicitar el directorio varios se cargara pagina.html. Evidentemente, si se pide una página concreta por su nombre es la solicitada la que se carga.



AccessFileName

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 este directorio concreto. El valor habitual es:

AccessFileName .htaccess

Ver AllowOverride a continuación.



AllowOverride

AllowOverride controla qué diectivas se pueden situar el los ficheros .htaccess.

Los valores de AllowOverride pueden ser "All", "None", o una combinación de:

  • AuthConfig: Permitir el uso de directivas de autorización (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, etc.).

  • FileInfo Permitir el uso de directivas de control de tipo de documentos (DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, etc).

  • Indexes Permitir el uso de directivas que controlan los índices de directorios (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, etc.).

  • Limit Permitir el uso de directivas de acceso de hosts (Allow, Deny y Order).

  • Options Permitir el uso los valores de la directiva Options.

Por ejemplo:

Options FileInfo AuthConfig Limit

o bien

AllowOverride None

Hay que tener en cuenta que si AllowOverride tiene un valor distinto a "None", el servidor web tendrá que buscar este fichero en todos los directorios que haya hasta llegar al fichero o directorio solicitado para aplicar la confiuración. Esto puede influir en el rendimiento del servidor web. Por este motivo es aconsejable poner de forma global

AllowOverride None

y después activarlo en el directorio concreto que queramos que tenga una configuración específica.

Si permtimos a otros usuario poner documentos en el servidor web deberemos controlar la directiva AllowOverride para determinar qué configuraciones permitimos que el usuario incluya en los ficheros .htaccess para evitar problemas de seguridad. Por ejemplo, la opción FollowSymLinks permite poner enlaces simbólicos en el servidor web para acceder a ficheros externos al árbol web (especificado mediante la directiva DocumentRoot. Normalmente para aumentar el rendimiento del servidor tendremos esta directiva activa para evitar que el servidor tenga que comprbar si un fichero o directorio es un enlace simbólico antes de leerlo; pero si esta directiva está activa un usuario podría poner un enlace, por ejemplo, al fichero /etc/passwd y hacerlo público a través de la web, cosa nada aconsajeble.



Allow

Allow afecta a los hosts que pueden acceder a una determinada área del servidor. El acceso se puede controlar por nombre, IP, rango de IP u otras características que se puedan almacenar en variables de entorno.

El primer argumento de esta directiva es siempre "from". Los siguientes argumentos pueden tener diferentes formas:

All se permite el acceso a todos los hosts salvo lo especificado en Deny y Order que se verá más adelante.

Para permitir el acceso a un grupo concreto de hosts podremos especificar:

Un nombre de dominio:

Ejemplo: Allow from ies-bezmiliana.org

Una dirección IP

Ejemplo: Allow from 192.168.1.3

Una dirección IP parcial

Ejemplo: Allow from 192.168.1

Una dirección de red/máscara

Ejemplo: Allow from 10.1.0.0/255.255.0.0

Una dirección de red/numero

Ejemplo: Allow from 10.1.0.0/16

Uso de una variable de entorno como por ejemplo User-Agent (navegador), Referer (procedencia del enlace), u otra cabecera de la petición HTTP.

Ejemplo:


SetEnvIf User-Agent ^TocToc/2.0 dejame
 <Directory /mispaginas>
  Order Deny,Allow
  Deny from all
  Allow from env=dejame
 </Directory> 

En este caso sólo se permitiría el acceso a un navegador cuya identificación empezara por ^TocToc/2.0, en otro caso lo deniega.

Otro caso: Si quisiéramos que una página sólo se pudiera consultar si procedemos de otra, pondríamos:


SetEnvIf Referer ^http://pagina-origen.html dejame
 <Directory /mispaginas>
  Order Deny,Allow
  Deny from all
  Allow from env=dejame
 </Directory> 

En este caso sólo se permitiría el acceso a un cliente que hubiera pulsado en un enlace en la página http://pagina-origen.html y en otro caso lo deniega.



Deny

Deny afecta a los hosts que no pueden acceder a una determinada área del servidor. El resto es idéntico a Allow.



Order

La directiva Order directive controla el orden en que se evalúan las directivas Allow y Deny:

Order Deny,Allow

Primero se evalúa Deny. Se permite acceso a cualquier host que primero no esté indicado en Deny o que sí lo esté en Allow. El acceso se garantiza por defecto.

Order Allow,Deny

Primero se evalúa Allow. Se deniega acceso a cualquier host que primero no esté indicado en Allow o que sí lo esté en Deny. El acceso se deniega por defecto.

Los valores se separan por comas y sin espacios.

En el siguiente ejemplo, todos los hosts del dominio ies-bezmiliana.org tienen acceso pero ningún otro.

Order Deny,Allow
 Deny from all
 Allow from ies-bezmiliana.org
 

En el siguiente ejemplo todos los hosts del dominio ies-bezmiliana.org tienen acceso salvo los host que estén en el subdominio piratillas.ies-bezmiliana.org. El resto de hosts que no están en el dominio ies-bezmiliana.org tampoco tendrían acceso.

Order Allow,Deny
 Allow from ies-bezmiliana.org
 Deny from piratillas.ies-bezmiliana.org

Por otro lado, si cambiamos Order en el anterior ejemplo y lo ponemos como Deny,Allow, todos los hosts tendrían acceso. Esto sucede porque Allow se evalúa en segundo lugar y permitiría acceso a piratillas.ies-bezmiliana.org y el acceso por defecto es aceptar.

La presencia de una directiva Order puede afectar al acceso a una parte del servidor incluso en ausencia de directivas Allow y Deny por los efectos de los valores predeterminados. Por ejemplo:

<Directory /www>
  Order Allow,Deny
 </Directory> 

denegaría todo el acceso al directorio /www ya que el estado por defecto sería Deny.



Location

Location proporciona control de acceso según petición.

Por ejemplo:


<Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from .ies-bezmiliana.org
</Location>

haría que cualquier petición /server-info generara un informe sobre el estado del servidor.



LocationMatch

LocationMatch proporciona control de acceso según petición basándose en una expresión regular.

Por ejemplo:


<LocationMatch "^/$>
    Options -Indexes
    ErrorDocument 403 /error/noindex.html
</LocationMatch>

haría que cualquier petición que comenzara y terminara por /, es decir el directorio principal del servidor se le desactivara la generación de índices y generara una página de error.

Con la configuración anterior evitamos que se pueda acceder directamente al contenido de un directorio que no tenga página de índice, lo contrario a "Options Indexes".



Files

Files permite especificar una configuración concreta para el acceso a ficheros concretos. La configuración es similar al Location.



FilesMatch

FilesMatch permite especificar una configuración concreta para el acceso a ficheros concretos basándose en expresones regulares. La configuración es similar al LocationMatch.

Por ejemplo:


<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
</Files>

impediría que alguien pudiera consultar desde un navegador cualquier fichero que comenzara por .ht, para evitar hacer visibles los ficheros .htaccess y .htpasswd.

Por ejemplo, si en ciertos directorio tuviéramos algunos scripts cuyo nombre termina en .sh y no quisiéramos que nadie los pudiera ver a través del servidor web pondríamos:


<FilesMatch "^.*\.sh">
    Order allow,deny
    Deny from all
</Files>



Alias

Alias permite albergar ficheros fuera del directorio especificado en DocumentRoot

La usaremos como:

Alias directorio_relativo directrorio_absoluto

Por ejemplo:


Alias /manual "/var/www/manual"

Haría que siempre que pongamos http://www.ies-bezmiliana.org/manual el contenido que se sirva sea el de /var/www/manual independientemente de donde esté definido el DocumentRoot.

También:


Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Con esta directiva podemos evitar tener activo FollowSymLinks y poder acceder a directorio ajenos al árbol web especificado en DocumentRoot.



AliasMatch

AliasMatch es idéntico a Alias salvo que podemos especificar expresiones regulares en lugar de un valor fijo.


Alias /pag.*/ "/var/paginas/"
<Directory "/var/www/icons">
    Options -Indexes
        DirectoryIndex indice.html
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

En este caso una petición dirigida a un directorio que empiece por pag automáticamente se dirige al directorio "/var/paginas".



TypesConfig

TypesConfig describe donde encontrar el fichero mime.types (o equivalente).

TypesConfig /etc/mime.types



DefaultType

DefaultType es el tipo MIME predeterminado que el servidor va a utlizar para un documento en el caso de que no pueda determinarlo, por ejemplo, a partir de su extensión.

Si la mayoría de los documentos son texto o HTML "text/plain" es el valor adecuado. Si la mayoría son binarios, como aplicaciones o imágenes se puede usar "application/octet-stream" para evitar que los navegadores intenten mostralos como si fueran texto.

DefaultType text/plain



HostnameLookups

HostnameLookups registra los nombres o las direcciones IP de los clientes. Por defecto está en Off para evitar que para cada consulta se tenga que realizar una resolución DNS para averiguar el nombre y disminuya el rendimiento. Si estuviera activo, para cada consulta el servidor apache solicita una resolución DNS inversa para averigar el nombre que corresponde con la dirección IP. Si realmente nos interesaran los nombres es aconsejable hacerlo a partir de los ficheros de "log" de forma independiente al servidor web como hacer ciertos porgramas de análisis de log como webalizer.

HostnameLookups Off



ErrorLog

ErrorLog indica la ubicación del fichero de registro de errores en las consultas. Es conveniente especificar un fichero de registro en cada VirtualHost con el nombre asiciado a ese servidor. De esta forma podemos separar los registros de los distintos servidores que tengamos.

ErrorLog logs/error_log

Observamos como hemos puesto una ruta relativa (logs/error_log); la ruta se añade a la especificada en ServerRoot que en nuestro caso tiene el valor /etc/httpd. Como el directorio para almacenar los logs del sistema es /var/log, normalmente /etc/httpd/logs será un enlace simbólico al directorio /var/log/httpd (o similar).



LogLevel

LogLevel Controla el número de mensajes registrados en error_log.

Puede ser: debug, info, notice, warn, error, crit, alert, emerg.

LogLevel warn



LogFormat

LogFormat permite definir distintos nombres para modelos de información que queremos guardar o registrar sobre las consultas que se hacen al servidor. Los valores que vienen predefinidos son:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

Como con estos valores es suficiente para recoger la información necesaria no vamos a entrar en detalles sobre las variables que se utilizan. Más detalles en http://www.apache.org/manual/mod/mod_log_config.htm



CustomLog

CustomLog la directiva especifica primero el fichero donde se anotan las peticiones hechas al servidor y en segundo lugar el tipo de anotación según se haya definido en alguna directiva LogFormat.

Por ejemplo, podríamos poner:


CustomLog logs/access_log common

o bien

CustomLog logs/access_log combined

o bien

CustomLog logs/referer_log referer

o

CustomLog logs/agent_log agent


ServerSignature

ServerSignature añade una línea informativa al final de las páginas generadas automáticamente, como cuando no se encuentra un documento.

Puede ser

ServerSignature On | Off | EMail

Por ejemplo:

ServerSignature On



ScriptAlias

ScriptAlias controla qué directorios contienen scripts del servidor. Es básicamente como Alias, salvo que sus contenidos se tratan como aplicaciones y el servidor las ejecuta cuando se solicitan.

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"


<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>



Redirect

Redirect permite inidcar al cliente que un documento ha cambiado.

Por ejemplo:

Redirect permanent /cursoactual http://www.ies-bezmiliana/2007


AddIcon

AddIcon indica al servidor qué imagen motrar según el tipo de fichero en los listados generados automáticamente. Sólo es válida para los directorios con la opción de FancyIndexing activa, es decir en le directorio tenemos IndexOptions FancyIndexing


AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

El servidor trae sus própias imágenes pero evidentemente podemos cambiarlas por otras que sean más de nuestro agrado.



DefaultIcon

DefaultIcon es el icono que se muestra para ficheros sin icono asocioado.

DefaultIcon /icons/unknown.gif


AddDescription

AddDescription permite poner una breve descripción tras el fichero, solo cuando es está activo FancyIndexing, decir en le directorio tenemos IndexOptions FancyIndexinga

El formato es

AddDescription "descripcion" tipofich


AddDescription "documento comprimido con GZIP" .gz
AddDescription "archivo tar" .tar
AddDescription "archivo tar comprimido" .tgz
AddDescription "archivo comprimido con ZIP .zip



ReadmeName

ReadmeName es el nombre del fichero que el servidor va a buscar para añadir a la lista de ficheros cuando tenga que generar un índice.

ReadmeName README.html

Esta opción sólo tiene sentido si tenemos activo "option +Indexes"



HeaderName

HeadeName es el nombre del fichero que el servidor va a buscar para poner delante de la lista de ficheros cuando tenga que generar un índice.

HeaderName HEADER.html

Esta opción sólo tiene sentido si tenemos activo "option +Indexes"



IndexIgnore

IndexIgnore es el conjunto de nombres de ficheros que no se deben mostrar en los listados de directorios. Por ejemplo:

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t


DefaultLanguage

DefaultLanguage se utiliza para especificar el idioma predeterminado cuando se negocian los contenidos con el cliente.

DefaultLanguage es


AddLanguage

Añade un nuevo idioma


# Danish (da) - Dutch (nl) - English (en) - Estonian (et)
# French (fr) - German (de) - Greek-Modern (el)
# Italian (it) - Norwegian (no) - Norwegian Nynorsk (nn) - Korean (kr) 
# Portugese (pt) - Luxembourgeois* (ltz)
# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
# Russian (ru) - Croatian (hr)
#
AddLanguage es .es
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .et
AddLanguage fr .fr
AddLanguage de .de
AddLanguage he .he
AddLanguage el .el
AddLanguage it .it
AddLanguage ja .ja
AddLanguage pl .po
AddLanguage kr .kr
AddLanguage pt .pt
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pt-br .pt-br
AddLanguage ltz .ltz
AddLanguage ca .ca
AddLanguage sv .se
AddLanguage cz .cz
AddLanguage ru .ru
AddLanguage tw .tw
AddLanguage zh-tw .tw
AddLanguage hr .hr



LanguagePriority

LanguagePriority permite dar precedencia a lagunos idiomas en las negociaciones de contenidos

LanguagePriority es en da nl et fr de el it ja kr no pl pt pt-br ltz ca sv tw


AddDefaultCharset

AddDefaultCharset especifica un conjunto de caracteres por defecto para las páginas devueltas.

El valor predeterminado es iso-8859-1 (latin1).

AddDefaultCharset ISO-8859-1

#AddDefaultCharset UTF-8



AddCharset

AddCharset son los nombres de ficheros y extensiones habituales para los conjuntos de caracteres.


AddCharset ISO-8859-1  .iso8859-1  .latin1
AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
AddCharset ISO-8859-3  .iso8859-3  .latin3
AddCharset ISO-8859-4  .iso8859-4  .latin4
AddCharset ISO-8859-5  .iso8859-5  .latin5 .cyr .iso-ru
AddCharset ISO-8859-6  .iso8859-6  .latin6 .arb
AddCharset ISO-8859-7  .iso8859-7  .latin7 .grk
AddCharset ISO-8859-8  .iso8859-8  .latin8 .heb
AddCharset ISO-8859-9  .iso8859-9  .latin9 .trk
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5        .Big5       .big5
AddCharset WINDOWS-1251 .cp-1251   .win-1251
AddCharset CP866       .cp866
AddCharset KOI8-r      .koi8-r .koi8-ru
AddCharset KOI8-ru     .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8       .utf8
AddCharset GB2312      .gb2312 .gb 
AddCharset utf-7       .utf7
AddCharset utf-8       .utf8
AddCharset big5        .big5 .b5
AddCharset EUC-TW      .euc-tw
AddCharset EUC-JP      .euc-jp
AddCharset EUC-KR      .euc-kr
AddCharset shift_jis   .sjis



AddType

AddType permite añadir o modificar la configuración MIME de un tipo concreto. Por ejemplo:

AddType application/x-tar .tgz

De esta forma cuando el servidor lea un fichero de este tipo para enivarlo a un cliente previamente el envía la cabecera adecuada para que el navegador cliente sepa qué hacer con él.



ErrorDocument

Permite personalizar las respuestas de los mensajes de error en tres formas distintas, un texto simple, una redirección a una página local o una redirección externa. El primer campo es el código de error correspondiente, por ejemplo 404 es el código de docmento inexistente. El segundo la acción que se realiza.

El administrador Web puede de modificar estos mensajes de error para facilitar el acceso a los clientes, es decir cuando alguien solicita alguna página que no existe puede mostrar una página donde haya enlaces a los contenidos que se albergan. Un servidor bien configurado debería tener páginas de error bien configuradas para evitar que aparecieran los mensajes de error estándar.

Vemos algunos ejemplos:


ErrorDocument 500 "El servidor ha fallado."
ErrorDocument 404 /noencontrado.html
ErrorDocument 404 "/cgi-bin/noencontrado.pl"
ErrorDocument 402 http://www.externo.dom/datos.html
Alias /error/ "/var/www/error/"
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
    <Directory "/var/www/error">
        AllowOverride None
        Options IncludesNoExec
        AddOutputFilter Includes html
        AddHandler type-map var
        Order allow,deny
        Allow from all
        LanguagePriority en es de fr
        ForceLanguagePriority Prefer Fallback
    </Directory>
    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
    ErrorDocument 410 /error/HTTP_GONE.html.var
    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
    ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
</IfModule>
</IfModule>



BrowserMatch

BrowserMatch modifica las repuestas normales HTTP en función de los problemas conocidos de ciertos navegadores.


BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully

Entorno global

Las directivas de esta sección afectan al comportamiento genera de Apache, como el número de peticiones concurrentes que puede atender o donde se ubican los ficheros de configuración.



LoadModule

Esta directiva corresponde a al soporte de Dynamic Shared Object (Objetos Dinámicos Compartidos). Son módulos que incorporan ciertas funcinalidades que se le incorporan al servidor Apache. Para que un módulo sea funcional tienen que estar construido como un DSO e incorporar la correspondiente directiva `LoadModule' antes de que se a utilizada. Los módulos compilados de forma estática (comprobar con httpd -l) no es necesario incluirlos.

A continuación vemos una lista de módulos. Su uso se verá, en algunos casos con las directivas correspondientes.


LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imap_module modules/mod_imap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so



ServerTokens

Esta directiva delimita qué información muestra el servidor sobre los componentes que está ejecutando.

Un valor posible y aceptable sería:

ServerTokens OS

que mostraría el sistema operativo sobre el que se ejecuta el servidor apache. Si no le importa la información que puede presentar al exterior puede omitir o comentar esta línea.

Si quiere ajustar más la información los valores posibles son:

ServerTokens Minimal|ProductOnly|OS|Full

y como ejemplo podemos ver:

ServerTokens Prod[uctOnly]Server envía (por ejemplo): Server: Apache

ServerTokens Min[imal] Server envía (por ejemplo): Server: Apache/1.3.0

ServerTokens OS Server envía (por ejemplo): Server: Apache/1.3.0 (Unix)

ServerTokens Full (o sin especificar) Server envía (por ejemplo): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2



ServerRoot

La directiva ServerRoot es el directorio raíz donde se almacenan los distintos ficheros que utiliza el servidor Apache salvo que se indiquen rutas absolutas como se indicaba con anterioridad. Es importante no añadir una barra al final del nombre del último directorio

El valor puede ser:

ServerRoot "/etc/httpd"

Es habitual que en este directorio hayan enlaces a otros directorio, por ejemplo el directorio de registro de accesos y errores (directorio de logs).



<IfModule modulo>

Indican una serie de directivas que el servidor sólo tendtrá en cuenta si el módulo indicado está activo en el servidor. Esta directiva puede contener múltiples línea y termina en un </IfModule>.

Por ejemplo:

<IfModule prefork.c>

directiva1

directiva3

directiva3

</IfModule>



Timeout

Timeout indica el número de segundos antes de que se cancele un conexión por falta de respuesta. El valor predeterminado:

Timeout 300



KeepAlive

KeepAlive indica si se permiten o no las conexiones persistentes, es decir más de una petición por conexión. Puede tomar los valores On u Off. El valor predeterminado es On. Por ejemplo:

KeepAlive Off



MaxKeepAliveRequests

MaxKeepAliveRequests indica el máximo número de peticiones que se permiten en conexiones persistentes. Un valor 0 permite un número ilimitado. Se recomienda dejar esta valor elevado para obterner un mayor rendimiento. Por ejemplo:

MaxKeepAliveRequests 100



KeepAliveTimeout

KeepAliveTimeout indica el número de segundos de espera para la siguiente petición del mismo cliente con la misma conexión.

KeepAliveTimeout 15



StartServers

Indica el número de proceso servidores al iniciar el servidor Web.

StartServers 8

De estos procesos se crearán nuevos procesos hijos para atender nuevas conexiones.



MinSpareServers y MaxSpareServers

Indican los números mínimo y máximo de procesos que permanecen en reserva. Estos procesos no atienden directamente una conexión sino que se desdoblan para que sus hijos sean quienes las atiendan.

MinSpareServers 5

MaxSpareServers 20



MaxClients

MaxClients indica el máximo número de procesos hijos que se lanzan para atender conexiones simultáneas. Si llegan más peticiones que procesos estas se almacenan en una cola (listen).

MaxClients 150



MaxRequestsPerChild

MaxRequestsPerChild indica el número maximo de hilos por hijo

MaxRequestsPerChild 1000



Listen

Listen permite asociar Apache a una dirección y/o puerto específico además del predeterminado

Ver la directiva <VirtualHost>

Por ejemplo:

Listen 12.34.56.78:8080

Listen 80



Include

Include inserta uno o varios ficheros de configuración. Por ejemplo

Include conf.d/*.conf

Es habitual dejar el fichero de configuración con las características globales que no se tienen que modificar el el fichero principal e incluir los ficheros que pueden estar sujetos a modficación en el directorio "/etc/httpd/conf.d". De esta forma para añadir o quitar un configuración de apache sólo tenemos que añadir o quitar un fichero del directorio /etc/httpd/conf.d

(Ver ServerRoot)

Configuraciones de directorios

Cada directorio al que Apache tenga acceso se puede configurar para satisfacer los servicios y características que se permiten o no en dicho directorio y en sus subdirectorios. En las anteriores descripciones de directivas ya hemos visto algunos ejemplos:web



Valor predeterminado

Primero configuramos el predeterminado con un conjunto de características muy restrictivas:


<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Esta configuración garantiza el mayor rendimiento ya que el servidor, por un lado no tiene que comprobar si un fichero es un enlace simbólico y por otro no tiene que leer ficheros .htaccess.

Si queremos modificar estas características, lo haremos más adelante para directorios concretos.



Directorio raíz

El valor de directorio tendría que ser el mismo que indicamos en la directiva DocumentRoot.


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



Directorios personales

Vemos un ejemplo de configuración del directorio personal para que esté restringido como sólo lectura:


<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    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>



Directorios restingidos

Podemos restringir el acceso a ciertos directorios mediante clave. Para esto tendremos que configurar el directorio adecuadamente. Lo vemos mediante un ejemplo. Queremos que para acceder al directorio /var/www/html/privado el navegador solicite una contraseña.

En primer lugar tendremos que indicarle a apache que busque en ese directorio un fichero .htaccess. Esto lo haremos indicando AllowOverride AuthConfig:


<Directory /var/www/html/privado>
 AllowOverride AuthConfig
<Directory 

En segundo lugar creamos un fichero llamado .htaccess en el directorio /var/www/html/privado con el siguiente contenido:


AuthName "Acceso restringido"
AuthUserFile /var/www/.htpasswd
AuthType Basic
require valid-user

El fichero .htpasswd es conveniente que esté fuera del árbol de directorios accesibles por los clientes del servidor web.

Por último creamos el fichero .htpasswd a la vez que damos de alta un usuario:

htpasswd -c /var/www/.htpasswd usuario

Podemos dar de alta más usuario ejecutando:

htpasswd  /var/www/.htpasswd usuario

en este caso sin la opción -c que se utiliza para crear el fichero.

Información adicional