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
|
<?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: 151405:395235 (outdated) -->
<!--
Copyright 2002-2005 The Apache Software Foundation or its licensors,
as applicable.
Licensed 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="env.xml.meta">
<title>Variables de entorno de Apache</title>
<summary>
<p>El servidor HTTP Apache HTTP ofrece un mecanismo para almacenar
información en variables especiales que se llaman
<em>variables de entorno</em>. Esta información puede ser
usada para controlar diversas operaciones como por ejemplo,
almacenar datos en ficheros de registro (log files) o controlar el
acceso al servidor. Las variables de entorno se usan también
como un mecanismo de comunicación con programas externos como
por ejemplo, scripts CGI. Este documento explica las diferentes
maneras de usar y manipular esas variables.</p>
<p>Aunque estas variables se llaman <em>variables de entorno</em>,
no son iguales que las variables de entorno que controla el
sistema operativo de la máquina en que se está
ejecutando Apache. Las variables de entorno de Apache se almacenan
y manipulan la en estructura interna de Apache. Solamente se
convierten en auténticas variables de entorno del sistema
operativo cuando se pasan a scripts CGI o a scripts Server Side
Include. Si quiere manipular el entorno del sistema operativo
sobre el que Apache se está ejecutando, debe usar los
mecanismos estándar de manipulación que tenga su sistema
operativo.</p>
</summary>
<section id="setting">
<title>Especificación de variables de entorno</title>
<related>
<modulelist>
<module>mod_env</module>
<module>mod_rewrite</module>
<module>mod_setenvif</module>
<module>mod_unique_id</module>
</modulelist>
<directivelist>
<directive module="mod_setenvif">BrowserMatch</directive>
<directive module="mod_setenvif">BrowserMatchNoCase</directive>
<directive module="mod_env">PassEnv</directive>
<directive module="mod_rewrite">RewriteRule</directive>
<directive module="mod_env">SetEnv</directive>
<directive module="mod_setenvif">SetEnvIf</directive>
<directive module="mod_setenvif">SetEnvIfNoCase</directive>
<directive module="mod_env">UnsetEnv</directive>
</directivelist>
</related>
<section id="basic-manipulation">
<title>Manipulación básica del entorno</title>
<p>El modo más básico de especificar el valor de una
variable de entorno en Apache es usando la directiva
incondicional <directive
module="mod_env">SetEnv</directive>. Las variables pueden
también pasarse desde el shell en el que se inicio Apache
usando la directiva <directive
module="mod_env">PassEnv</directive>.</p>
</section>
<section id="conditional">
<title>Especificación condicional por petición</title>
<p>Si necesita más flexibilidad, las directivas incluidas
con mod_setenvif permiten especificar valores para las
variables de entorno de manera condicional en función de
las caracteristicas particulares de la petición que se
esté procesando. Por ejemplo, se puede especificar un
valor para una variable solamente cuando la petición se
haga con un navegador específico, o solamente cuando la
petición contenga una determinada información en su
cabecera. Si necesita aún más flexibilidad, puede
conseguirla con la directiva <directive
module="mod_rewrite">RewriteRule</directive> del módulo
mod_rewrite que tiene la opción <code>[E=...]</code> para
especificar valores en las variables de entorno.</p>
</section>
<section id="unique-identifiers">
<title>Identificadores únicos</title>
<p>Finalmente, mod_unique_id determina el valor de la variable
de entorno <code>UNIQUE_ID</code> para cada
petición. Este valor está garantizado que sea
único entre todas las peticiones bajo condiciones muy
específicas.</p>
</section>
<section id="standard-cgi">
<title>Variables CGI estándar</title>
<p>Además de todas las variables de entorno especificadas
en la configuración de Apache y las que se pasan desde el
shell, los scripts CGI y las páginas SSI tienen un
conjunto de variables de entorno que contienen
meta-información sobre la petición tal y como
establece la <a
href="http://cgi-spec.golux.com/">especificación
CGI</a>.</p>
</section>
<section id="caveats">
<title>Algunas limitaciones</title>
<ul>
<li>No es posible reeemplazar los valores o cambiar las
variables estándar CGI usando las directivas de
manipulación del entorno.</li>
<li>Cuando se usa <program>suexec</program> para
lanzar scripts CGI, el entorno se limpia y se queda reducido
a un conjunto de variables <em>seguras</em> antes de que se
lancen los scripts. La lista de variables <em>seguras</em>
se define en el momento de compilar en
<code>suexec.c</code>.</li>
<li>Por razones de portabilidad, los nombres de las
variables de entorno solo pueden contener letras,
números y guiones bajos. Además, el primer
caracter no puede ser un número. Los caracteres que no
cumplan con esta restricción, se reemplazan
automáticamente por un guión bajo cuando se pasan
a scripts CGI y a páginas SSI.</li>
</ul>
</section>
</section>
<section id="using">
<title>Cómo usar las variables de entorno</title>
<related>
<modulelist>
<module>mod_access</module>
<module>mod_cgi</module>
<module>mod_ext_filter</module>
<module>mod_headers</module>
<module>mod_include</module>
<module>mod_log_config</module>
<module>mod_rewrite</module>
</modulelist>
<directivelist>
<directive module="mod_access">Allow</directive>
<directive module="mod_log_config">CustomLog</directive>
<directive module="mod_access">Deny</directive>
<directive module="mod_ext_filter">ExtFilterDefine</directive>
<directive module="mod_headers">Header</directive>
<directive module="mod_log_config">LogFormat</directive>
<directive module="mod_rewrite">RewriteCond</directive>
<directive module="mod_rewrite">RewriteRule</directive>
</directivelist>
</related>
<section id="cgi-scripts">
<title>Scripts CGI</title>
<p>Uno de los principales usos de las variables de entorno es
pasar información a scripts CGI. Tal y como se explicaba
más arriba, el entorno que se pasa a los scripts CGI
incluye meta-información estándar acerca de la
petición además de cualquier variable especificada
en la configuración de Apache. Para obtener más
información sobre este tema consulte el <a
href="howto/cgi.html">tutorial sobre CGIs</a>.</p>
</section>
<section id="ssi-pages">
<title>Páginas SSI</title>
<p>Los documentos procesados por el servidor con el filtro
<code>INCLUDES</code> perteneciente a mod_include pueden
imprimir las variables de entorno usando el elemento
<code>echo</code>, y pueden usar las variables de entorno en
elementos de control de flujo para dividir en partes una
página condicional según las características de
la petición. Apache también sirve páginas SSI
con las variables CGI estándar tal y como se explica
más arriba en este documento. Para obetener más
información, consulte el <a
href="howto/ssi.html">tutorial sobre SSI</a>.</p>
</section>
<section id="access-control">
<title>Control de acceso</title>
<p>El acceso al servidor puede ser controlado en función
del valor de las variables de entorno usando las directivas
<code>allow from env=</code> y <code>deny from env=</code>. En
combinación con la directiva <directive
module="mod_setenvif">SetEnvIf</directive>, se puede tener un
control más flexible del acceso al servidor en
función de las características del cliente. Por
ejemplo, puede usar estas directivas para denegar el acceso si
el cliente usa un determinado navegador.</p>
</section>
<section id="logging">
<title>Registro condicional</title>
<p>Los valores de las variables de entorno pueden registrarse
en el log de acceso usando la directiva <directive
module="mod_log_config">LogFormat</directive> con la
opción <code>%e</code>. Además, la decisión
sobre qué peticiones se registran puede ser tomada en
función del valor de las variables de entorno usando la
forma condicional de la directiva <directive
module="mod_log_config">CustomLog</directive>. En
combinación con <directive module="mod_setenvif"
>SetEnvIf</directive>, esto permite controlar de forma
flexible de qué peticiones se guarda registro. Por
ejemplo, puede elegir no registrar las peticiones que se hagan
a ficheros cuyo nombre termine en <code>gif</code>, o puede
elegir registrar únicamente las peticiones que provengan
de clientes que estén fuera de su propia red.</p>
</section>
<section id="response-headers">
<title>Cabeceras de respuesta condicionales</title>
<p>La directiva <directive
module="mod_headers">Header</directive> puede utilizar la
presencia o ausencia de una variable de entorno para
determinar si una determinada cabecera HTTP se incluye en la
respuesta al cliente. Esto permite, por ejemplo, que una
determinada cabecera de respuesta sea enviada únicamente
si también estaba presente en la petición del
cliente.</p>
</section>
<section id="external-filter">
<title>Activación de filtros externos</title>
<p>External filters configured by <module>mod_ext_filter</module>
using the <directive
module="mod_ext_filter">ExtFilterDefine</directive> directive can
by activated conditional on an environment variable using the
<code>disableenv=</code> and <code>enableenv=</code> options.</p>
</section>
<section id="url-rewriting">
<title>Reescritura de URLs</title>
<p>La expresion <code>%{ENV:...}</code> de <em>TestString</em>
en una directiva <directive
module="mod_rewrite">RewriteCond</directive> permite que el
motor de reescritura de mod_rewrite pueda tomar decisiones en
función del valor de variables de entorno. Tenga en
cuenta que las variables accesibles en mod_rewrite sin el
prefijo <code>ENV:</code> no son realmente variables de
entorno. En realidad, son variables especiales de mod_rewrite
que no pueden ser accedidas desde otros módulos.</p>
</section>
</section>
<section id="special">
<title>Variables de entorno con funciones especiales</title>
<p>Los problemas de interoperatividad han conducido a la
introducción de mecanismos para modificar el
comportamiento de Apache cuando se comunica con determinados
clientes. Para hacer que esos mecanismos sean tan flexibles
como sea posible, se invocan definiendo variables de entorno,
normalmente con la directiva <directive
module="mod_setenvif">BrowserMatch</directive>, aunque
también se puede usar por ejemplo con las directivas
<directive module="mod_env">SetEnv</directive> y <directive
module="mod_env">PassEnv</directive>.</p>
<section id="downgrade">
<title>downgrade-1.0</title>
<p>Fuerza que la petición sea tratada como una petición
HTTP/1.0 incluso si viene en una especificación posterior.</p>
</section>
<section id="force-no-vary">
<title>force-no-vary</title>
<p>Hace que cualquier campo <code>Vary</code> se elimine de la
cabecera de la respuesta antes de ser enviada al
cliente. Algunos clientes no interpretan este campo
correctamente (consulte la sección sobre <a
href="misc/known_client_problems.html">problemas conocidos con
clientes</a>); usar esta variable puede evitar esos
problemas. Usar esta variable implica también el uso de
<strong>force-response-1.0</strong>.</p>
</section>
<section id="force-response">
<title>force-response-1.0</title>
<p>Fuerza que la respuesta a una petición HTTP/1.0 se haga
también según la especificación HTTP/1.0. Esto se
implementó originalmente como resultado de un problema con
los proxies de AOL. Algunos clientes HTTP/1.0 no se comportan
correctamente cuando se les envía una respuesta HTTP/1.1, y
este mecanismo hace que se pueda interactuar con ellos.</p>
</section>
<section id="gzip-only-text-html">
<title>gzip-only-text/html</title>
<p>Cuando tiene valor "1", esta variable desactiva el filtro
de salida DEFLATE de <module>mod_deflate</module> para
contenidos de tipo diferentes de <code>text/html</code>.</p>
</section>
<section id="no-gzip"><title>no-gzip</title>
<p>Cuando se especifica, se desactiva el filtro
<code>DEFLATE</code> de <module>mod_deflate</module>.</p>
</section>
<section id="nokeepalive">
<title>nokeepalive</title>
<p>Desactiva <directive module="core">KeepAlive</directive>.</p>
</section>
<section id="prefer-language"><title>prefer-language</title>
<p>Influye en el comportamiento de
<module>mod_negotiation</module>. Si contiene una etiqueta de
idioma (del tipo <code>en</code>, <code>ja</code> o
<code>x-klingon</code>), <module>mod_negotiation</module>
intenta que se use ese mismo idioma en la respuesta. Si no
está disponible ese idioma, se aplica el proceso de <a
href="content-negotiation.html">negociación</a>
normal.</p>
</section>
<section id="redirect-carefully">
<title>redirect-carefully</title>
<p>Fuerza que el servidor sea especialmente cuidadoso al
enviar una redirección al cliente. Se usa normalmente
cuando un cliente tiene un problema conocido tratando las
redirecciones. Fue implementado originalmente por el problema
que presentaba el software de WebFolders de Microsoft, que
tenía problemas interpretando redirecciones originadas
cuando se accedía a recursos servidos usando DAV.</p>
</section>
<section id="suppress-error-charset">
<title>suppress-error-charset</title>
<p><em>Disponible en las versiones de Apache 2.0.40 y posteriores</em></p>
<p>Cuando Apache efectúa una redirección en respuesta a la
petición de un cliente, la respuesta incluye algún texto para que
se muestre en caso de que el cliente no pueda seguir (o no siga)
automáticamente la redirección. Apache normalmente etiqueta este
texto siguiendo la codificación ISO-8859-1.</p>
<p>Sin embargo, si la redirección es a una página que
usa una codificación diferente, algunas versiones de
navegadores que no funcionan correctamente intentarán usar la
codificación del texto de redirección en lugar de la de
pagina a la que ha sido redireccionado. La consecuencia de esto
puede ser, por ejemplo, que una página en griego no se
muestre correctamente.</p>
<p>Especificar un valor en esta variable de entorno hace que
Apache omita la codificación en el texto que incluye con las
redirecciones, y que esos navegadores que no funcionan
correctamente muestren correctamente la página de destino.</p>
</section>
</section>
<section id="examples">
<title>Ejemplos</title>
<section id="misbehaving">
<title>Cómo cambiar el comportamiento de clientes que se
comportan de manera inapropiada</title>
<p>Recomendamos que incluya las siguentes líneas en el
fichero httpd.conf para evitar problemas conocidos</p>
<example><pre>
#
# Las siguientes directivas modifican el comportamiento normal de las respuestas HTTP.
# La primera directiva desactiva keepalive para Netscape 2.x y para navegadores
# que la simulan. Hay problemas conocidos con esos navegadores.
# La segunda directiva es para Microsoft Internet Explorer 4.0b2
# que tiene un fallo en la implemantación de HTTP/1.1 y no soporta
# keepalive adecuadamente cuando se usan respuestas 301 ó 302 (redirecciones).
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
#
# La siguiente directiva desactiva las respuestas HTTP/1.1 para navegadores que
# violan la especificación HTTP/1.0 @@@ by not being able to grok a
# basic 1.1 response @@@.
#
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0</pre></example>
</section>
<section id="no-img-log">
<title>No almacenar entradas en registro de acceso para las
imágenes</title>
<p>Este ejemplo evita que las peticiones de imágenes
aparezcan en el registro de acceso. Puede ser modificada
fácilmente para evitar que se registren entradas de
peticiones de directorios, o provenientes de determinados
clientes.</p>
<example><pre>
SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.png image-request
CustomLog logs/access_log common env=!image-request</pre></example>
</section>
<section id="image-theft">
<title>Evitar el "robo de imagenes"</title>
<p>Este ejemplo muestra como evitar que otras webs usen las
imágenes de su servidor para sus páginas. Esta
configuración no se recomienda, pero puede funcionar en
determinadas circunstancias. Asumimos que que todas sus
imágenes están en un directorio llamado
/web/images.</p>
<example><pre>
SetEnvIf Referer "^http://www.example.com/" local_referal
# Allow browsers that do not send Referer info
SetEnvIf Referer "^$" local_referal
<Directory /web/images>
Order Deny,Allow
Deny from all
Allow from env=local_referal
</Directory></pre></example>
<p>Para obtener más información sobre esta
técnica, consulte el tutorial de ApacheToday " <a
href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
Keeping Your Images from Adorning Other Sites</a>".</p>
</section> </section> </manualpage>
|