| <?xml version="1.0" encoding="UTF-8" ?> |
| <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> |
| <?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?> |
| <!-- English Revision: 421174 --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <manualpage metafile="sections.xml.meta"> |
| |
| <title>Secciones de configuración</title> |
| |
| <summary> <p> Las directivas presentes en los <a |
| href="configuring.html">ficheros de configuración</a> pueden ser |
| de aplicación para todo el servidor, o puede que su |
| aplicación se limite solamente a determinados directorios, |
| ficheros, hosts, o URLs. Este documento explica cómo usar las |
| secciones de configuración y los ficheros <code>.htaccess</code> |
| para modificar el ámbito de aplicación de las directivas de |
| configuración.</p> </summary> |
| |
| <section id="types"><title>Tipos de secciones de |
| configuración</title> |
| |
| <related> |
| <modulelist> |
| <module>core</module> |
| <module>mod_proxy</module> |
| </modulelist> |
| <directivelist> |
| <directive type="section" module="core">Directory</directive> |
| <directive type="section" module="core">DirectoryMatch</directive> |
| <directive type="section" module="core">Files</directive> |
| <directive type="section" module="core">FilesMatch</directive> |
| <directive type="section" module="core">IfDefine</directive> |
| <directive type="section" module="core">IfModule</directive> |
| <directive type="section" module="core">Location</directive> |
| <directive type="section" module="core">LocationMatch</directive> |
| <directive type="section" module="mod_proxy">Proxy</directive> |
| <directive type="section" module="mod_proxy">ProxyMatch</directive> |
| <directive type="section" module="core">VirtualHost</directive> |
| </directivelist> |
| </related> |
| |
| <p>Exiten dos tipos básicos de secciones de |
| configuración. Por un lado, la mayoría de las secciones de |
| configuración se evalúan para cada petición que se |
| recibe y se aplican las directivas que se incluyen en las distintas |
| secciones solamente a las peticiones que se adecúan a |
| determinadas características. Por otro lado, las secciones de tipo |
| <directive type="section" module="core">IfDefine</directive> e |
| <directive type="section" module="core">IfModule</directive>, se |
| evalúan solamente al inicio o reinicio del servidor. Si al |
| iniciar el servidor las condiciones son las adecuadas, las directivas |
| que incluyen estas secciones se aplicarán a todas las peticiones |
| que se reciban. Es caso contrario, esas directivas que incluyen se |
| ignoran completamente.</p> |
| |
| <p>Las secciones <directive type="section" |
| module="core">IfDefine</directive> incluyen directivas que se |
| aplicarán solamente si se pasa un determinado parámetro por |
| línea de comandos al ejecutar <program>httpd</program>. Por |
| ejemplo, con la siguiente configuración, todas las peticiones |
| serán redireccionadas a otro sitio web solamente si el servidor |
| se inició usando <code>httpd -DClosedForNow</code>:</p> |
| |
| <example> |
| <IfDefine ClosedForNow><br /> |
| Redirect / http://otherserver.example.com/<br /> |
| </IfDefine> |
| </example> |
| |
| <p>La sección <directive type="section" |
| module="core">IfModule</directive> es muy parecida. La diferencia |
| respecto a <directive type="section" |
| module="core">IfDefine</directive> está en que incluye directivas |
| que se aplicarán solamente si un determinado módulo en |
| particular está disponible en el servidor. El módulo debe |
| estar compilado estáticamente en el servidor, o si está |
| compilado de forma dinámica ha de ponerse antes una línea |
| <directive module="mod_so">LoadModule</directive> en el fichero de |
| configuración. Esta directiva debe usarla solamente si necesita |
| que su fichero de configuración funcione estén o no |
| instalados determinados módulos. No debe usarla para incluir |
| directivas que quiera que se apliquen siempre, porque puede suprimir |
| mensajes de error que pueden ser de mucha utilidad para detectar la |
| falta de algún módulo.</p> |
| |
| <p>En el siguiente ejemplo, la directiva <directive |
| module="mod_mime_magic">MimeMagicFiles</directive> se aplicará |
| solamente si el módulo <module>mod_mime_magic</module> está |
| disponible.</p> |
| |
| <example> |
| <IfModule mod_mime_magic.c><br /> |
| MimeMagicFile conf/magic<br /> |
| </IfModule> |
| </example> |
| |
| <p>Tanto <directive type="section" module="core">IfDefine</directive> |
| como <directive type="section" module="core">IfModule</directive> |
| pueder usarse con condiones negativas anteponiendo al test el |
| carácter "!". Estas secciones también pueden anidarse para |
| establecer restricciones más complejas.</p> |
| |
| </section> |
| |
| <section id="file-and-web"><title>Sistemas de ficheros y espacio |
| web</title> |
| |
| <p>Las secciones de configuración usadas con más frecuencia |
| son las que cambian la configuración de áreas del sistema de |
| ficheros o del espacio web. En primer lugar, es importante comprender |
| la diferencia que existe entre estos dos conceptos. El sistema de |
| ficheros es la visión de sus discos desde el punto de vista del |
| sistema operativo. Por ejemplo, en una instalación estándar, |
| Apache estará en <code>/usr/local/apache2</code> en un sistema |
| Unix o en <code>"c:/Program Files/Apache Group/Apache2"</code> en un |
| sistema Windows. (Tenga en cuenta que con Apache debe usar siempre |
| barras /, incluso en Windows.) Por el contrario, el espacio web lo |
| que presenta el servidor web y que visualiza el cliente. De manera que |
| la ruta <code>/dir/</code> en el espacio web se corresponde con la |
| ruta <code>/usr/local/apache2/htdocs/dir/</code> en el sistema de |
| ficheros de una instalación estándar en Unix. El espacio |
| web no tiene que tener correspondencia directa con el sistema de |
| ficheros, porque las páginas web pueden generarse de forma |
| dinámica a partir de bases de datos o partiendo de otras |
| ubicaciones.</p> |
| |
| <section id="filesystem"><title>Secciones relacionadas con el sistema |
| de ficheros</title> |
| |
| <p>Las secciones <directive type="section" |
| module="core">Directory</directive> y <directive type="section" |
| module="core">Files</directive>, junto con sus contrapartes que usan |
| expresiones regulares, aplican sus directivas a áreas del sistema de |
| ficheros. Las directivas incluidas en una sección <directive |
| type="section" module="core">Directory</directive> se aplican al |
| directorio del sistema de ficheros especificado y a sus |
| subdirectorios. El mismo resultado puede obtenerse usando <a |
| href="howto/htaccess.html">ficheros .htaccess</a>. Por ejemplo, en la |
| siguiente configuración, se activarán los índices de |
| directorio para el directorio <code>/var/web/dir1</code> y sus |
| subdirectorios.</p> |
| |
| <example> |
| <Directory /var/web/dir1><br /> |
| Options +Indexes<br /> |
| </Directory> |
| </example> |
| |
| <p>Las directivas incluidas en una sección <directive |
| type="section" module="core">Files</directive> se aplicarán a |
| cualquier fichero cuyo nombre se especifique, sin tener en cuenta en |
| que directorio se encuentra. Por ejemplo, las siguientes directivas de |
| configuración, cuando se colocan en la sección principal del |
| fichero de configuración, deniegan el acceso a cualquier fichero |
| llamado <code>private.html</code> sin tener en cuenta de donde se |
| encuentre.</p> |
| |
| <example> |
| <Files private.html><br /> |
| Order allow,deny<br /> |
| Deny from all<br /> |
| </Files> |
| </example> |
| |
| <p>Para referirse a archivos que se encuentren en un determinado lugar |
| del sistema de ficheros, se pueden combinar las secciones <directive |
| type="section" module="core">Files</directive> y <directive |
| type="section" module="core">Directory</directive>. Por ejemplo, la |
| siguiente configuración denegará el acceso a |
| <code>/var/web/dir1/private.html</code>, |
| <code>/var/web/dir1/subdir2/private.html</code>, |
| <code>/var/web/dir1/subdir3/private.html</code>, y cualquier otra |
| aparición de <code>private.html</code> que se encuentre en |
| <code>/var/web/dir1/</code> o cualquiera de sus subdirectorios.</p> |
| |
| <example> |
| <Directory /var/web/dir1><br /> |
| <Files private.html><br /> |
| Order allow,deny<br /> |
| Deny from all<br /> |
| </Files><br /> |
| </Directory> |
| </example> |
| </section> |
| |
| <section id="webspace"><title>Secciones relacionadas con el espacio |
| web</title> |
| |
| <p>La sección <directive type="section" |
| module="core">Location</directive> y su contraparte que usa |
| expresiones regulares, cambian |
| la configuración para el contenido del espacio web. Por ejemplo, |
| la siguiente configuración evita que se acceda a cualquier URL |
| que empiece por /private. En concreto, se aplicará a |
| peticiones que vayan dirigidas a |
| <code>http://yoursite.example.com/private</code>, |
| <code>http://yoursite.example.com/private123</code>, y a |
| <code>http://yoursite.example.com/private/dir/file.html</code> |
| así como |
| también a cualquier otra petición que comience por |
| <code>/private</code>.</p> |
| |
| <example> |
| <Location /private><br /> |
| Order Allow,Deny<br /> |
| Deny from all<br /> |
| </Location> |
| </example> |
| |
| <p>La sección <directive type="section" |
| module="core">Location</directive> puede no tener nada que ver con el |
| sistema de ficheros. Por ejemplo, el siguiente ejemplo muestra como |
| asociar una determinada URL a un handler interno de Apache del |
| módulo <module>mod_status</module>. No tiene por qué |
| existir ningún fichero <code>server-status</code> en el sistema |
| de ficheros.</p> |
| |
| <example> |
| <Location /server-status><br /> |
| SetHandler server-status<br /> |
| </Location> |
| </example> |
| </section> |
| |
| <section id="wildcards"><title>Caracteres comodín y expresiones |
| regulares</title> |
| |
| <p>Las secciones <directive type="section" |
| module="core">Directory</directive>, <directive type="section" |
| module="core">Files</directive>, y <directive type="section" |
| module="core">Location</directive> pueden usar caracteres comodín |
| del tipo <code>fnmatch</code> de la librería estándar de C. |
| El carácter "*" equivale a cualquier secuencia de caracteres, "?" |
| equivale a cualquier carácter individual, y "[<em>seq</em>]" |
| equivale a cualquier carácter en <em>seq</em>. Ningún |
| carácter comodín equivale a"/", que debe siempre |
| especificarse explícitamente.</p> |
| |
| <p>Si necesita un sistema de equivalencias más flexible, cada |
| sección tiene una contraparte que acepta <a |
| href="glossary.html#regex">expresiones regulares</a> compatibles con |
| Perl: <directive type="section" |
| module="core">DirectoryMatch</directive>, <directive type="section" |
| module="core">FilesMatch</directive>, y <directive type="section" |
| module="core">LocationMatch</directive>. Consulte la sección |
| sobre la fusión de secciones de configuración para ver la |
| forma en que las secciones expresiones regulares cambian el modo en |
| que se aplican las directivas.</p> |
| |
| <p>Abajo se muestra un ejemplo en el que una sección de |
| configuración que usa caracteres comodín en lugar de una |
| expresión regular modifica la configuración de todos los |
| directorios de usuario:</p> |
| |
| <example> |
| <Directory /home/*/public_html><br /> |
| Options Indexes<br /> |
| </Directory> |
| </example> |
| |
| <p>Usando expresiones regulares, podemos denegar el acceso a muchos |
| tipos ficheros de imágenes de una sola vez:</p> |
| |
| <example> |
| <FilesMatch \.(?i:gif|jpe?g|png)$><br /> |
| Order allow,deny<br /> |
| Deny from all<br /> |
| </FilesMatch> |
| </example> |
| |
| </section> |
| |
| <section id="whichwhen"><title>Qué usar en cada momento</title> |
| |
| <p>Decidir cuando hay que usar secciones que se apliquen sobre el |
| sistema de ficheros y cuando usar secciones que se apliquen sobre el |
| espacio web es bastante fácil. Cuando se trata de directivas que |
| se aplican a objetos que residen en el sistema de ficheros, siempre se |
| deben usar <directive type="section" |
| module="core">Directory</directive> o <directive type="section" |
| module="core">Files</directive>. Cuando se trata de directivas que se |
| aplican a objetos que no residen en el sistema de ficheros (por |
| ejemplo una página web generada a partir de una base de datos), |
| se usa <directive type="section" |
| module="core">Location</directive>.</p> |
| |
| <p>Es importante no usar nunca <directive type="section" |
| module="core">Location</directive> cuando se trata de restringir el |
| acceso a objetos en el sistema de ficheros. Esto se debe a que varias |
| URLs diferentes pueden corresponderse con una misma ubicación en |
| el sistema de ficheros, haciendo que la restricción pueda ser |
| evitada. Por ejemplo, considere la siguiente configuración:</p> |
| |
| <example> |
| <Location /dir/><br /> |
| Order allow,deny<br /> |
| Deny from all<br /> |
| </Location> |
| </example> |
| |
| <p>La restricción funciona si se produce una petición a |
| <code>http://yoursite.example.com/dir/</code>. Pero, ¿qué |
| ocurriría si se trata de un sistema de ficheros que no distingue |
| mayúsculas de minúsculas? Entonces, la restricción que |
| ha establecido podría evitarse fácilmente haciendo una |
| peticion a <code>http://yoursite.example.com/DIR/</code>. Una |
| sección <directive type="section" |
| module="core">Directory</directive> por el contrario, se aplicará |
| a cualquier contenido servido desde esa ubicación, |
| independientemente de cómo se llame. (Una excepción son los |
| enlaces del sistema de ficheros. El mismo directorio puede ser |
| colocado en más de una ubicación del sistema de ficheros |
| usando enlaces simbólicos. La sección <directive |
| type="section" module="core">Directory</directive> seguirá los |
| enlaces simbólicos sin resetear la ruta de fichero (resetting the |
| pathname). Por tanto, para conseguir el mayor nivel de seguridad, los |
| enlaces simbólicos deben desactivarse con la directiva <directive |
| module="core">Options</directive> correspondiente.)</p> |
| |
| <p>En el caso de que piense que nada de esto le afecta porque usa un |
| sistema de ficheros que distingue mayúsculas de minúsculas, |
| recuerde que hay muchas otras maneras de hacer corresponder |
| múltiples direcciones del espacio web con una misma |
| ubicación del sistema de ficheros. Por tanto, use las secciones |
| de configuración que se aplican al sistema de ficheros siempre |
| que sea posible. Hay, sin embargo, una excepción a esta |
| regla. Poner restricciones de configuración en una sección |
| <code><Location /></code> es completamente seguro porque estas |
| secciones se aplicarán a todas las peticiones independientemente |
| de la URL específica que se solicite.</p> </section> |
| |
| </section> |
| |
| <section id="virtualhost"><title>Hosts virtuales</title> |
| |
| <p>El contenedor <directive type="section" |
| module="core">VirtualHost</directive> agrupa directivas que se |
| aplicarán a hosts específicos. Esto es útil cuando se |
| sirven varios hosts con una misma máquina y con una |
| configuración diferente cada uno. Para más información, |
| consulte la <a href="vhosts/">documentación sobre hosts |
| virtuales</a>.</p> </section> |
| |
| <section id="proxy"><title>Proxy</title> |
| |
| <p>Las secciones <directive type="section" |
| module="mod_proxy">Proxy</directive> y <directive type="section" |
| module="mod_proxy">ProxyMatch</directive> aplican las directivas de |
| configuración que engloban solo a los sitios accedidos a |
| través del servidor proxy del módulo |
| <module>mod_proxy</module> que tengan equivalencia con la URL |
| especificada. Por ejemplo, la siguiente configuración |
| evitará que se use el servidor proxy para acceder al sitio web |
| <code>cnn.com</code>.</p> |
| |
| <example> |
| <Proxy http://cnn.com/*><br /> |
| Order allow,deny<br /> |
| Deny from all<br /> |
| </Proxy> |
| </example> |
| </section> |
| |
| <section id="whatwhere"><title>¿Qué directivas se pueden |
| usar?</title> |
| |
| <p>Para ver que directivas son las que se pueden usar en cada |
| sección de configuración, consulte el <a |
| href="mod/directive-dict.html#Context">Context</a> de la directiva. |
| Todas las directivas que está permitido usar en las secciones |
| <directive type="section" module="core">Directory</directive> se |
| pueden usar también en las secciones <directive type="section" |
| module="core">DirectoryMatch</directive>, <directive type="section" |
| module="core">Files</directive>, <directive type="section" |
| module="core">FilesMatch</directive>, <directive type="section" |
| module="core">Location</directive>, <directive type="section" |
| module="core">LocationMatch</directive>, <directive type="section" |
| module="mod_proxy">Proxy</directive>, y <directive type="section" |
| module="mod_proxy">ProxyMatch</directive>. Sin embargo, hay algunas |
| excepciones:</p> |
| |
| <ul> <li>La directiva <directive |
| module="core">AllowOverride</directive> funciona en las secciones |
| <directive type="section" module="core">Directory</directive>.</li> |
| |
| <li>Las directivas <directive module="core">Options</directive> |
| <code>FollowSymLinks</code> y <code>SymLinksIfOwnerMatch</code> |
| <directive module="core">Options</directive> funcionan solo en las |
| secciones <directive type="section" |
| module="core">Directory</directive> y en los ficheros |
| <code>.htaccess</code>.</li> |
| |
| <li>La direcitva <directive module="core">Options</directive> no puede |
| ser usada en secciones <directive type="section" |
| module="core">Files</directive> y <directive type="section" |
| module="core">FilesMatch</directive>.</li> |
| </ul> |
| </section> |
| |
| <section id="mergin"><title>¿Cómo se fusionan las distintas |
| secciones?</title> |
| |
| <p>Las secciones de configuración se aplican en un determinado |
| orden. Como este orden puede tener efectos significativos en como se |
| interpretan las directivas de configuración, es importante |
| entender cómo funciona este proceso.</p> |
| |
| <p>El orden de fusión es el siguiente:</p> |
| |
| <ol> |
| <li> <directive type="section" |
| module="core">Directory</directive> (excepto expresiones |
| regulares) y <code>.htaccess</code> simultáneamente (si el |
| uso de <code>.htaccess</code> está permitido, prevaleciendo |
| sobre <directive type="section" |
| module="core">Directory</directive>)</li> |
| |
| <li><directive type="section" module="core">DirectoryMatch</directive> |
| (y <code><Directory ~></code>)</li> |
| |
| <li><directive type="section" module="core">Files</directive> y |
| <directive type="section" module="core">FilesMatch</directive> |
| simultáneamente</li> |
| |
| <li><directive type="section" module="core">Location</directive> |
| y <directive type="section" |
| module="core">LocationMatch</directive> |
| simultáneamente</li> |
| </ol> |
| |
| <p>Aparte de <directive type="section" |
| module="core">Directory</directive>, cada grupo se procesa en el |
| orden en que aparezca en los ficheros de configuración. |
| <directive type="section" module="core">Directory</directive> |
| (grupo 1 arriba) se procesa empezando por los componentes de la |
| ruta al directorio más cortos. Por ejemplo, |
| <code><Directory |
| /var/web/dir></code> se procesará antes de |
| <code><Directory /var/web/dir/subdir></code>. Si hay que |
| aplicar varias secciones <directive type="section" |
| module="core">Directory</directive> a un mismo directorio, se |
| aplican en el orden en que aparezcan en el fichero de |
| configuración. Las configuraciones incluidas mediante la |
| directiva <directive module="core">Include</directive> se |
| tratarán como si estuvieran dentro del fichero de |
| configuración principal en lugar de la sección |
| <directive module="core">Include</directive>.</p> |
| |
| <p>Las secciones incluidas dentro de secciones <directive |
| type="section" module="core">VirtualHost</directive> se aplican |
| <em>después de</em> las correspondientes secciones fuera |
| de la definición del host virtual. Esto permite que la |
| configuración especificada para los hosts virtuales pueda |
| prevalecer sobre la configuración del servidor principal.</p> |
| |
| <p>Las secciones que aparecen después prevalecen sobre las |
| que aparecen antes.</p> |
| |
| <note><title>Nota técnica.</title> Previamente a la fase de |
| traducción de nombres (en la que se analizan los |
| <code>Aliases</code> y <code>DocumentRoots</code> para calcular |
| las correspondencias entre URLs y nombres de ficheros) se |
| ejecuta una secuencia |
| <code><Location></code>/<code><LocationMatch></code>. Los |
| resultados de esta secuencia se desechan después de |
| ejecutar la traducción. </note> |
| |
| <section id="merge-examples"><title>Algunos ejemplos</title> |
| |
| <p>Abajo se muestra un ejemplo para que se vea claramente cuál es |
| el orden de fusión. Asumiendo que todas las secciones se aplican |
| a la petición, las de este ejemplo se aplicarían en el orden |
| A > B > C > D > E.</p> |
| |
| <example> |
| <Location /><br /> |
| E<br /> |
| </Location><br /> |
| <br /> |
| <Files f.html><br /> |
| D<br /> |
| </Files><br /> |
| <br /> |
| <VirtualHost *><br /> |
| <Directory /a/b><br /> |
| B<br /> |
| </Directory><br /> |
| </VirtualHost><br /> |
| <br /> |
| <DirectoryMatch "^.*b$"><br /> |
| C<br /> |
| </DirectoryMatch><br /> |
| <br /> |
| <Directory /a/b><br /> |
| A<br /> |
| </Directory><br /> |
| <br /> |
| </example> |
| |
| <p>A continuación se muestra un ejemplo más concreto. |
| Independientemente de las restricciones de acceso que se hayan |
| establecido en las secciones <directive module="core" |
| type="section">Directory</directive>, la sección <directive |
| module="core" type="section">Location</directive> será evaluada |
| al final y se permitirá acceso sin restricciones al servidor. En |
| otras palabras, el orden de fusión es importante, de modo que |
| ponga atención.</p> |
| |
| <example> |
| <Location /><br /> Order deny,allow<br /> Allow from all<br /> |
| </Location><br /> <br /> |
| # Esta sección <Directory> no tendrá efecto<br /> |
| <Directory /><br /> |
| Order allow,deny<br /> |
| Allow from all<br /> |
| Deny from badguy.example.com<br /> |
| </Directory> |
| </example> |
| |
| </section> |
| |
| </section> |
| </manualpage> |
| |