1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
|
<?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: 396609 -->
<!--
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>
|