THIS IS AN UNOFFICIAL TRANSLATION OF AN OFFICIAL DOCUMENT, FOR REVIEW PURPOSES ONLY

ESTA ES UNA TRADUCCIóN NO OFICIAL DE UN DOCUMENTO OFICIAL, ES SOLAMENTE PARA REVISIóN

THE FORMATTING IS MESSED UP WHILE I FIGURE OUT A PROPER XSL TEMPLATE TO OUTPUT WIKI CODE

Secciones de configuración

Las directivas en los ficheros de configuración pueden actuar sobre el servidor completo, o pueden restringir su ámbito de actuación a directorios, ficheros, hosts o URLs específicos. Este documento describe como usar secciones de configuración o ficheros .htaccess para cambiar el ámbito de las directivas de configuración.

*
[Tipos de contenedores de secciones de configuración]

*
[Sistema de ficheros y espacio web]

*
[Hosts virtuales]

*
[Proxy]

*
[¿Qué directivas son permitidas?]

*
[Como se mezclan las secciones]

Tipos de contenedores de secciones de configuración

Módulos Relacionados

Directivas Relacionadas

Existen dos tipos base de contenedores, la mayoría de ellos son evaluados en cada petición. Las directivas almacenadas en estos contenedores son solamente aplicadas a aquellas peticiones que coincidan con las condiciones definidas en los contenedores. Por el contrario, los contenedores %3CIfDefine%3E , %3CIfModule%3E , e
%3CIfVersion%3E son evaluados solamente al reiniciar o iniciar el servidor. Si sus condiciones son ciertas al inicio, entonces las directivas almacenadas serán aplicadas a todas las peticiones. Si las condiciones son falsas, las directivas serán ignoradas.

La directiva %3CIfDefine%3E almacena directivas que solamente serán aplicadas si el parámetro apropiado es especificado en la línea de comandos de httpd. Por ejemplo, con la siguiente configuración, todas las peticiones serán redireccionadas a otro sitio siempre y cuando el servidor sea iniciado usando httpd -DHoyCerramos:

<IfDefine HoyCerramos>
Redirect / http://otherserver.example.com/
</IfDefine>


La directiva %3CIfModule%3E es muy similar, sólo que agrupa directivas que serán aplicadas exclusivamente si un módulo específico está disponible en el servidor. El módulo debe estar compilado estáticamente, o bien dinámicamente y la línea con la directiva LoadModule debe estar antes en el fichero de configuración. Esta directiva debe usarse solamente cuando es necesario que el fichero de configuración funcione de manera independiente a los módulos instalados en el servidor. No debe usarse para agrupar directivas que deben funcionar siempre, puesto que puede suprimir mensajes de error sobre módulos faltantes.

En el siguiente ejemplo, la directiva MimeMagicFiles se aplicará solamente si
mod_mime_magic está disponible.

<IfModule mod_mime_magic.c>
MimeMagicFile conf/magic
</IfModule>


La directiva %3CIfVersion%3E es muy similar a las directivas %3CIfDefine%3E e %3CIfModule%3E , exceptuando que agrupa directivas que se aplicarán solamente si una versión determinada del servidor se está ejecutando. Este módulo está
diseñado para el uso en conjuntos de pruebas o en grandes redes que deben lidiar con diferentes versiones de httpd y diferentes configuraciones.

  <IfVersion >= 2.1>

    # esto solamente ocurre en versiones mayores que o iguales a
    # 2.1.0.

  </IfVersion>


Las directivas %3CIfDefine%3E ,
%3CIfModule%3E , e
%3CIfVersion%3E pueden negar sus condiciones anteponiendo a la condición un "!". Además, estas secciones pueden anidarse para generar restricciones más complejas.

Sistema de ficheros y espacio web

Los contenedores más comúnmente usados son los que cambian la configuración del servidor para lugares determinados del sistema de ficheros o del espacio web (esto es, URLs). En primer lugar, es importante comprender la diferencia entre ambos. El sistema de ficheros es la manera en la que el sistema operativo ve a los discos y su contenido. Por ejemplo, en una instalación por omisión, Apache está en la carpeta /usr/local/apache2 en un sistema de ficheros Unix o en "c:/Program Files/Apache Group/Apache2" en un sistema de ficheros Windows. (Siempre ha de usarse "/" como separador de carpetas en Apache, incluso en Windows.) Por otro lado, el espacio web es la vista del sitio como lo despacha el servidor y como es visto por los clientes. Así, el path
/dir/ en el espacio web corresponde al path
/usr/local/apache2/htdocs/dir/ en el sistema de ficheros en una instalación de Apache por omisión en Unix. El espacio web puede no estar correlacionado directamente con el sistema de ficheros, dado que las páginas pueden ser generadas dinámicamente desde bases de datos u otros medios. Además, las URL pueden ser modificadas al vuelo mediante diversos mecanismos.

Contenedores del sistema de ficheros

Las directivas %3CDirectory%3E y %3CFiles%3E , así como sus contrapartes basadas en regex , hacen que las directivas contenidas sean aplicadas a partes del sistema de ficheros. Directivas contenidas en una sección %3CDirectory%3E se aplican a la carpeta en el sistema de ficheros con el nombre especificado en la directiva y también se aplican a todas sus subcarpetas. El mismo efecto se obtiene usando ficheros ["howto/htaccess.html" .htaccess]. Por ejemplo, en la configuración que sigue, los índices de carpeta serán habilitados para
/var/web/dir1 y todas sus subcarpetas.

<Directory /var/web/dir1>
Options +Indexes
</Directory>


Directivas contenidas por una sección %3CFiles%3E son aplicadas a cualquier fichero con el nombre especificado, sin tener en cuenta la carpeta en el que éste se encuentre. Por ejemplo, las siguientes directivas puestas en la sección principal del fichero de configuración denegarán el acceso a cualquier fichero llamado privado.html sin considerar dónde se encuentre.

<Files privado.html>
Order allow,deny
Deny from all
</Files>


Para aplicar la configuración solamente a ficheros en una parte determinada del sistema de ficheros, las secciones
%3CFiles%3E y
%3CDirectory%3E pueden combinarse. Por ejemplo, la siguiente configuración denegará el acceso a
/var/web/dir1/privado.html, /var/web/dir1/subdir2/privado.html,
/var/web/dir1/subdir3/privado.html, y cualquier otra instancia de privado.html bajo la carpeta /var/web/dir1/.

<Directory /var/web/dir1>
<Files privado.html>
Order allow,deny
Deny from all
</Files>
</Directory>


Contenedores del espacio web

La directiva %3CLocation%3E y su contraparte basada en regex cambian la configuración para el contenido en el espacio web. Por ejemplo, la siguiente configuración previene el acceso a cualquier URL que comience con /privado. En concreto, se aplicará a peticiones por http://sitio.example.com/privado, http://sitio.example.com/privado123, y por http://sitio.example.com/privado/dir/file.html así como a cualquier otra petición que comience con la cadena /privado.

<Location /privado>
Order Allow,Deny
Deny from all
</Location>


La directiva %3CLocation%3E no tiene porqué tener que ver con el sistema de ficheros. Por ejemplo, el siguiente ejemplo muestra cómo mapear una URL determinada a un handler interno de Apache provisto por mod_status . No necesita existir en el sistema de ficheros un fichero llamado server-status.

<Location /server-status>
SetHandler server-status
</Location>


Comodines y Expresiones Regulares

Las directivas %3CDirectory%3E ,
%3CFiles%3E , y
%3CLocation%3E pueden usar comodines de línea de comando como en la función de la biblioteca estándar de C fnmatch. El caracter "*" equivale a cualquier secuencia de caracteres, "?" equivale a cualquier caracter y "[seq]" equivale a cualquier caracter en seq. El caracter "/" no será capturado por ningún comodín, ha de ser especificado explícitamente.

Si se necesitan comparaciones aún más flexibles, cada contenedor tiene una contraparte basada en expresiones regulares (regex) %3CDirectoryMatch%3E , %3CFilesMatch%3E , y %3CLocationMatch%3E que permiten utilizar expresiones regulares compatibles con Perl. Más adelante se describe como cambia la forma de aplicar estas secciones cuando se utiliza algún contenedor basado en regexes.

Una sección que utiliza un comodín para cambiar la configuración de todos las carpetas de usuario es la que sigue:

<Directory /home/*/public_html>
Options Indexes
</Directory>


Usando secciones basadas en regexes, podemos denegar el acceso a muchos tipos de archivo simultáneamente:

<FilesMatch \.(?i:gif|jpe?g|png)$>
Order allow,deny
Deny from all
</FilesMatch>


Qué usar cuándo

Escoger entre contenedores del sistema de ficheros y del espacio web es bastante fácil. Cuando se aplican directivas a objetos que residen en el sistema de ficheros, siempre se ha de utilizar %3CDirectory%3E o %3CFiles%3E . Cuando se aplican directivas a objetos que no residen en el sistema de ficheros, como una página creada desde una base de datos, se ha de emplear %3CLocation%3E .

Es importante destacar que nunca se ha de usar %3CLocation%3E cuando se intenta restringir el acceso a objetos en el sistema de ficheros. Esto es porque muchas URLs pueden equivaler a una misma ubicación en el sistema de ficheros, de este modo inutilizando la restricción. Por ejemplo:

<Location /dir/>
Order allow,deny
Deny from all
</Location>


Esto funciona bien para la petición http://yoursite.example.com/dir/. Pero ¿qué ocurre si se está en un sistema de ficheros que no distingue mayúsculas? En este caso la restricción será
fácilmente anulada mediante la petición http://yoursite.example.com/DIR/. La directiva %3CDirectory%3E , en cambio, se aplicará a cualquier contenido servido desde esa ubicación especifica en el sistema de ficheros, sin tener en cuenta el nombre que se le da en el espacio web (una excepción a esta regla son los enlaces simbólicos, el mismo directorio puede estar en más de una parte del sistema de ficheros a través de enlaces. La directiva %3CDirectory%3E seguirá estos enlaces sin reiniciar el nombre de la carpeta. De este modo, para el máximo nivel de seguridad, los enlaces simbólicos han de deshabillitarse con la directiva
Options apropiada.)

Si se piensa que nada de esto es aplicable porque el sistema de ficheros en uso es sensible a mayúsculas, se ha de recordar que hay muchas otras formas de mapear múltiples ubicaciones del espacio web a la misma ubicación en el sistema de ficheros. Por lo tanto siempre se ha de utilizar contenedores del sistema de ficheros cuando sea posible. Sin embargo, hay una excepción a esta regla. Poner restricciones de configuración en una sección <Location/> es perfectamente seguro porque esta sección se aplicará
para todas las peticiones sin considerar la URL específica que se solicite.

Hosts virtuales

El contenedor %3CVirtualHost%3E agrupa directivas que se aplican a hosts determinados. Esto es útil cuando se sirven múltiples hosts desde la misma máquina con una configuración distinta para cada uno. Para mayor información, ver la
["vhosts/" documentación de Hosts Virtuales].

Proxy

Los contenedores %3CProxy%3E y %3CProxyMatch%3E aplican la configuración contenida solamente a los sitios accedidos a través de un servidor proxy mod_proxy que coincide con la URL solicitada. Por ejemplo, la siguiente configuración prevendrá que el servidor proxy sea utilizado para acceder al sitio cnn.com.

<Proxy http://cnn.com/*>
Order allow,deny
Deny from all
</Proxy>


¿Qué directivas son permitidas?

Para averiguar qué directivas se pueden utilizar en qué secciones de configuración, se ha de revisar el ["mod/directive-dict.html#Context" Contexto] de la directiva. Todo lo que se permite en las secciones
%3CDirectory%3E es también permitido en las secciones
%3CDirectoryMatch%3E ,
%3CFiles%3E ,
%3CFilesMatch%3E ,
%3CLocationMatch%3E ,
%3CProxy%3E , y %3CProxyMatch%3E

  • Hay algunas excepciones:

La directiva AllowOverride sólo funciona en secciones
%3CDirectory%3E .

Las Options FollowSymLinks y SymLinksIfOwnerMatch solamente funcionan en secciones %3CDirectory%3E o en ficheros .htaccess.

La directiva Options no se puede utilizar en secciones %3CFiles%3E ni %3CFilesMatch%3E .

Como se mezclan las secciones

Las secciones de configuración son aplicadas en un orden específico. Dado que puede tener un efecto significativo en cómo son interpretadas las directivas de configuración, es importante entender cómo funciona.

El orden es:

A.

%3CDirectory%3E (exceptuando expresiones regulares)
y .htaccess simultáneamente (con
.htaccess teniendo preferencia sobre
%3CDirectory%3E )

%3CDirectoryMatch%3E
(y <Directory ~>)

%3CFiles%3E y %3CFilesMatch%3E simultáneamente

%3CLocation%3E
y %3CLocationMatch%3E simultáneamente

Aparte de %3CDirectory%3E , cada grupo es procesado en el orden en que aparece
en los ficheros de configuración. %3CDirectory%3E (el grupo 1 arriba)
se procesa desde la porción más corta del nombre de la carpeta hasta la más larga.
Por ejemplo, <Directory /var/web/dir> será procesado antes que
<Directory /var/web/dir/subdir>. Si múltiples secciones %3CDirectory%3E son aplicables a la misma carpeta,
éstas son procesadas en el orden en que aparecen en el fichero de configuración. Configuraciones
incluídas a través de la directiva Include serán tratados como si estuviesen dentro del fichero que las incluye en la
ubicación de la directiva Include .

Secciones dentro de directivas %3CVirtualHost%3E son aplicadas
después de las secciones correspondientes fuera de la definición del host virtual.
Esto permite que los hosts virtuales puedan superseder a la configuración principal.

Cuando la petición es atendida por mod_proxy , el contenedor
%3CProxy%3E
toma el lugar del contenedor %3CDirectory%3E en el orden de procesamiento.
Los contenidos de las secciones posteriores superseden a los de las anteriores.

Nota Técnica

Hay una secuencia que se realiza justo antes de la fase de traducción
de nombres (donde los Aliases y DocumentRoots
se utilizan para mapear URLs a nombres de ficheros). Los resultados de esta
secuencia son descartados completamente una vez que la fase de traducción ha
terminado.

Algunos Ejemplos

A continuación hay un ejemplo que pretende mostrar el orden de la mezcla. Asumiendo que todos se aplican a la petición, las directivas del ejemplo se aplicarán en el orden A > B > C > D >
E.

<Location />
E
</Location>

<Files f.html>
D
</Files>

<VirtualHost *>
<Directory /a/b>
B
</Directory>
</VirtualHost>

<DirectoryMatch "^.*b$">
C
</DirectoryMatch>

<Directory /a/b>
A
</Directory>



Otro ejemplo, un poco más concreto. Sin considerar las restricciones de acceso puestas en las secciones %3CDirectory%3E , the sección %3CLocation%3E será evaluada al último y permitirá
acceso sin restricciones al servidor. En otras palabras, el orden de la mezcla es importante, así que se debe ser cuidadadoso.

<Location />
Order deny,allow
Allow from all
</Location>

# Ups!  Esta sección <Directory> no tendrá efecto
<Directory />
Order allow,deny
Allow from all
Deny from chicomalo.example.com
</Directory>


  • No labels