1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
4 <!-- English Revision: 782860 -->
5 <!-- =====================================================
6 Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7 Reviewed by: Orhan Berent <berent belgeler.org>
8 ========================================================== -->
11 Licensed to the Apache Software Foundation (ASF) under one or more
12 contributor license agreements. See the NOTICE file distributed with
13 this work for additional information regarding copyright ownership.
14 The ASF licenses this file to You under the Apache License, Version 2.0
15 (the "License"); you may not use this file except in compliance with
16 the License. You may obtain a copy of the License at
18 http://www.apache.org/licenses/LICENSE-2.0
20 Unless required by applicable law or agreed to in writing, software
21 distributed under the License is distributed on an "AS IS" BASIS,
22 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 See the License for the specific language governing permissions and
24 limitations under the License.
27 <manualpage metafile="env.xml.meta">
29 <title>Apache’de Ortam Değişkenleri</title>
32 <p>Apache HTTP Sunucusunda bilgiyi değişkenlerde saklamak için <em>ortam
33 değişkenleri</em> adı verilen bir mekanizma bulunur. Saklanan bu bilgi
34 erişim denetimi, günlük kaydı gibi çeşitli işlemleri denetlemekte
35 kullanılabilir. Değişkenler ayrıca, CGI betikleri gibi harici
36 uygulamalarla iletişim mekanizması olarak da kullanılabilir. Bu belgede
37 bu değişkenler üzerindeki işlemlere ve kullanım şekillerine
40 <p>Bu değişkenlere <em>ortam değişkenleri</em> dense de işletim sisteminin
41 ortam değişkenleri gibi değillerdir. Bunlar sadece Apache ortamında
42 geçerli değişkenler olup işletim sisteminin bu değişkenlerden haberi
43 olmaz. Sadece CGI betikleri ve SSI sayfaları gibi harici uygulamalar
44 tarafından üretilen ortam değişkenleri sistem ortamının değişkenleri
45 haline gelirler. İşletim sistemi ortamına çalışmakta olan sunucudan
46 müdahale etmek isterseniz işletim sisteminizin kabuğu tarafından sağlanan
47 standart ortam müdahale mekanizmalarını kullanmalısınız.</p>
50 <section id="setting">
51 <title>Ortam Değişkenlerinin Atanması</title>
54 <module>mod_env</module>
55 <module>mod_rewrite</module>
56 <module>mod_setenvif</module>
57 <module>mod_unique_id</module>
60 <directive module="mod_setenvif">BrowserMatch</directive>
61 <directive module="mod_setenvif">BrowserMatchNoCase</directive>
62 <directive module="mod_env">PassEnv</directive>
63 <directive module="mod_rewrite">RewriteRule</directive>
64 <directive module="mod_env">SetEnv</directive>
65 <directive module="mod_setenvif">SetEnvIf</directive>
66 <directive module="mod_setenvif">SetEnvIfNoCase</directive>
67 <directive module="mod_env">UnsetEnv</directive>
71 <section id="basic-manipulation">
72 <title>Temel Ortamda Değişiklik</title>
74 <p>Apache ortamında bir ortam değişkenine müdahale etmenin en temel
75 yolu hiçbir koşula tabi olmayan <directive module="mod_env"
76 >SetEnv</directive> yönergesini kullanmaktır. Bu değişkenleri Apache
77 başlatılırken sistem ortam değişkenleri haline getirmek için
78 <directive module="mod_env">PassEnv</directive> yönergesi
82 <section id="conditional">
83 <title>İsteğe Bağlı Şartlı Atamalar</title>
85 <p>Esnekliği arttırmak için, <module>mod_setenvif</module> modülü ile
86 isteğin özelliklerine uygun olarak her isteğe özel değişkenler
87 atayabilmek mümkün kılınmıştır. Örneğin, bir değişken sadece isteği
88 yapan tarayıcıya özgü bir değerle veya sadece belli bir başlık
89 alanınına bağlı olarak atanabilir. Daha da esnek bir mekanizma,
90 ortam değişkeni atamak için <code>[E=...]</code> seçeneğinin
91 kullanıldığı <module>mod_rewrite</module> modülünün <directive
92 module="mod_rewrite" >RewriteRule</directive> yönergesi ile
96 <section id="unique-identifiers">
97 <title>Eşsiz Betimleyiciler</title>
99 <p>Son olarak, <module>mod_unique_id</module> <code>UNIQUE_ID</code>
100 ortam değişkenine her istek için o isteğin çok özel koşullar altında
101 tüm diğer istekler arasında eşsizliğini garanti edecek bir değer
105 <section id="standard-cgi">
106 <title>Standart CGI Değişkenleri</title>
108 <p>Apache yapılandırmasıyla atanan ve kabuğa aktarılan ortam
109 değişkenlerinden başka <a href="http://cgi-spec.golux.com/">CGI
110 Belirtimi</a>nin gerektirdiği istekler hakkında temel bilgileri
111 içeren ortam değişkenlerinin CGI betikleri ve SSI sayfalarınca
112 atanabilmesi sağlanmıştır.</p>
115 <section id="caveats">
116 <title>Bazı Yetersizlikler</title>
119 <li>Standart CGI değişkenlerini ortam değişkenlerine müdahale
120 yönergelerini kullanarak değiştirmek veya geçersiz kılmak mümkün
123 <li>CGI betiklerini çalıştırmak için <program>suexec</program>
124 kullanıldığında ortam, CGI betikleri çalıştırılmadan önce
125 <em>güvenilir</em> değişkenler kalacak şekilde temizlenir.
126 <em>Güvenilir</em> değişken listesi <code>suexec.c</code> içinde
127 derleme sırasında tanımlanır.</li>
129 <li>Taşınabilirlik adına, ortam değişkenlerinin isimleri sadece
130 harfler, rakamlar ve alt çizgi imlerini içerebilir. Bunlara ek
131 olarak ismin ilk karakteri bir rakam olmamalıdır. Değişkenler CGI
132 betiklerine ve SSI sayfalarına aktarılırken bu sınırlamalara uygun
133 olmayan karakterlerin yerlerine alt çizgi imleri konur.</li>
135 <li>İsteklerin işleme konması sırasında <directive
136 module="mod_env">SetEnv</directive> yönergesi geç çalıştırılır,
137 yani <directive module="mod_setenvif">SetEnvIf</directive> ve
138 <directive module="mod_rewrite">RewriteCond</directive> gibi
139 yönergeler <directive module="mod_env">SetEnv</directive> ile
140 atanan değişken değerlerini görmezler.</li>
145 <title>Ortam Değişkenlerinin Kullanımı</title>
149 <module>mod_authz_host</module>
150 <module>mod_cgi</module>
151 <module>mod_ext_filter</module>
152 <module>mod_headers</module>
153 <module>mod_include</module>
154 <module>mod_log_config</module>
155 <module>mod_rewrite</module>
158 <directive module="mod_authz_host">Allow</directive>
159 <directive module="mod_log_config">CustomLog</directive>
160 <directive module="mod_authz_host">Deny</directive>
161 <directive module="mod_ext_filter">ExtFilterDefine</directive>
162 <directive module="mod_headers">Header</directive>
163 <directive module="mod_log_config">LogFormat</directive>
164 <directive module="mod_rewrite">RewriteCond</directive>
165 <directive module="mod_rewrite">RewriteRule</directive>
169 <section id="cgi-scripts">
170 <title>CGI Betikleri</title>
172 <p>Ortam değişkenlerinin başlıca amaçlarından biri CGI betikleriyle
173 iletişim kurmaktır. Yukarıda bahsedildiği gibi CGI betiklerine
174 aktarılan ortam Apache yapılandırmasında atanan değişkenlere ek
175 olarak istek hakkında standart temel bilgileri de içerir. Bu konuda
176 ayrıntılı bilgi edinmek için <a href="howto/cgi.html">CGI
177 Öğreticisi</a>ne bakabilirsiniz.</p>
180 <section id="ssi-pages">
181 <title>SSI Sayfaları</title>
183 <p>Sunucu tarafında <module>mod_include</module> modülünün
184 <code>INCLUDES</code> süzgeci ile yorumlanan SSI sayfalarında ortam
185 değişkenleri <code>echo</code> elemanı ile basılabilir ve sayfayı
186 isteğin özelliklerine uygun olarak oluşturmak için ortam
187 değişkenleri akış denetim elemanları içinde kullanılabilir. Apache
188 ayrıca, yukarıda bahsedildiği gibi standart CGI ortam değişkenli SSI
189 sayfalarını da sağlayabilmektedir. Daha ayrıntılı bilgi edinmek için
190 <a href="howto/ssi.html" >SSI Öğreticisi</a>ne bakabilirsiniz.</p>
193 <section id="access-control">
194 <title>Erişim Denetimi</title>
196 <p><code>allow from env=</code> ve <code>deny from env=</code>
197 yönergeleri sayesinde ortam değişkenlerine dayalı olarak sunucuya
198 erişim denetim altında tutulabilir. Bunlar <directive
199 module="mod_setenvif">SetEnvIf</directive> yönergesi ile birlikte
200 kullanılmak suretiyle sunucuya erişim isteğin özelliklerine bağlı
201 olarak daha esnek bir tarzda denetlenebilir. Örneğin, belli bir
202 tarayıcının sunucuya erişimi bu yönergelerle engellenebilir.</p>
205 <section id="logging">
206 <title>Şartlı Günlük Kaydı</title>
208 <p>Ortam değişkenleri <directive module="mod_log_config"
209 >LogFormat</directive> yönergesinin <code>%e</code> seçeneği
210 kullanılarak erişim günlüğüne kaydedilebilir. Bundan başka,
211 <directive module="mod_log_config">CustomLog</directive> yönergesi
212 sayesinde isteklerin günlüğe kaydedilip kaydedilmeyeceğine ortam
213 değişkenlerine dayalı olarak karar verilmesi sağlanabilir. Bunlar
214 <directive module="mod_setenvif">SetEnvIf</directive> yönergesi ile
215 birlikte kullanılmak suretiyle günlük kayıtları isteğin
216 özelliklerine bağlı olarak daha esnek bir tarzda denetlenebilir.
217 Örneğin, <code>gif</code> uzantılı dosyalar için yapılan isteklerin
218 günlüğe kaydedilmemesi veya sadece alt ağınızın dışından gelen
219 isteklerin günlüğe kaydedilmesini isteyebilirsiniz.</p>
222 <section id="response-headers">
223 <title>Şartlı Yanıt Başlıkları</title>
225 <p><directive module="mod_headers">Header</directive> yönergesi belli
226 bir yanıt başlığının istemciye gönderilip gönderilmeyeceğine belli
227 bir ortam değişkeninin varlığına bakarak karar vermek için
228 kullanılabilir. Böylece örneğin, belli bir başlığın istemciye
229 gönderilmesine istemciden belli bir başlığın alınıp alınmadığına
230 bağlı olarak karar verilebilir.</p>
234 <section id="external-filter">
235 <title>Harici Süzgeçlerin Etkinleştirilmesi</title>
237 <p><module>mod_ext_filter</module> tarafından yapılandırılan harici
238 süzgeçler <directive module="mod_ext_filter"
239 >ExtFilterDefine</directive> yönergesinin <code>disableenv=</code> ve
240 <code>enableenv=</code> seçenekleri kullanılarak bir ortam
241 değişkenine bağlı olarak etkinleştirilebilir.</p>
244 <section id="url-rewriting">
245 <title>URL Kurgulaması</title>
247 <p><directive module="mod_rewrite">RewriteCond</directive>
248 yönergesinin <em>SınamaDizgesi</em> olarak kullanılan
249 <code>%{ENV:<em>değişken</em>}</code> biçemi
250 <module>mod_rewrite</module> yeniden yazma motorunun ortam
251 değişkenlerine bağlı kararlar almasını mümkün kılar. Yalnız şuna
252 dikkat ediniz: <module>mod_rewrite</module>’ta <code>ENV:</code>
253 öneki kullanılmadan belirtilen değişkenler ortam değişkenleri
254 değillerdir. Onlar <module>mod_rewrite</module>’a özgü diğer
255 modüllerden erişilemeyen özel değişkenlerdir.</p>
259 <section id="special">
260 <title>Özel Amaçlı Ortam Değişkenleri</title>
262 <p>Birlikte çalışabilirlik sorunları Apache’nin belli istemcilerle
263 veri alışverişi sırasında davranışını değiştirmesini gerektirebilir.
264 Genellikle <directive module="mod_env" >SetEnv</directive> ve
265 <directive module="mod_env" >PassEnv</directive> yönergelerinden
266 başka <directive module="mod_setenvif" >BrowserMatch</directive>
267 gibi yönergelerle ortam değişkenleri atanarak bunu sağlayan
268 mekanizmaların olabildiğince esnek davranabilmesi sağlanabilir.</p>
270 <section id="downgrade">
271 <title><code>downgrade-1.0</code></title>
273 <p>İstek, daha yüksek bir HTTP protokolüyle yapılmış olsa bile
274 HTTP/1.0 isteği olarak ele alınır.</p>
277 <section id="force-gzip">
278 <title><code>force-gzip</code></title>
279 <p><code>DEFLATE</code> süzgeci etkinse tarayıcının tercih ettiği
280 kodlama koşulsuz olarak yoksayılarak sıkıştırılmış çıktı
283 <section id="force-no-vary">
284 <title><code>force-no-vary</code></title>
286 <p>İstemciye gönderilmeden önce yanıttan <code>Vary</code> alanının
287 çıkarılmasına sebep olur. Bazı istemciler bu alanı gerektiği gibi
288 yorumlayamazlar, bu değişken atanarak bu sorunla karşılaşılmamaya
289 çalışılır. Bu değişkenin atanması ayrıca
290 <strong>force-response-1.0</strong> değişkeninin de atanmasına sebep
294 <section id="force-response">
295 <title><code>force-response-1.0</code></title>
297 <p>HTTP/1.0 isteği yapan istemcilere HTTP/1.0 yanıtı verilmesini zorunlu
298 kılar. AOL vekillerindeki bir sorun nedeniyle gerçeklenmiştir. Bazı
299 HTTP/1.0 istemciler HTTP/1.1 yanıtlarında doğru davranmayabilirler; bu
300 değişken atanarak bunların sorunları giderilebilir.</p>
304 <section id="gzip-only-text-html">
305 <title><code>gzip-only-text/html</code></title>
307 <p>Bu değişkene "1" değeri atandığında <code>text/html</code>’den
308 farklı içerik türleri için <module>mod_deflate</module> modülü
309 tarafından sağlanan <code>DEFLATE</code> çıktı süzgeci iptal
310 edilir. Sıkıştırılmış olarak saklanan dosyalar kullanıyorsanız bu
311 değişkeni <module>mod_negotiation</module> modülü de dikkate alır
312 (kimliğine bakarak sadece gzip için değil, tüm kodlamalar için bunu
316 <section id="no-gzip"><title><code>no-gzip</code></title>
318 <p>Bu değişken atandığında, <module>mod_deflate</module> modülünün
319 <code>DEFLATE</code> süzgeci kapatılır ve
320 <module>mod_negotiation</module> modülü kodlanmış kaynak teslimatını
325 <section id="no-cache"><title>no-cache</title>
326 <p><em>2.2.11 sürümünden beri kullanılabilmektedir.</em></p>
328 <p>Atandığı takdirde, <module>mod_cache</module> artık
329 önbelleklenebilecek yanıtları kaydetmeyecektir. Bu ortam değişkeni bir
330 yanıtın halihazırda mevcut bir isteğe sunulmak üzere önbellekte olup
331 olmadığından etkilenmez.</p>
335 <section id="nokeepalive">
336 <title><code>nokeepalive</code></title>
338 <p>Bu değişken atandığında, <directive module="core"
339 >KeepAlive</directive> yönergesi iptal edilir.</p>
343 <section id="prefer-language">
344 <title><code>prefer-language</code></title>
346 <p>Değer olarak <code>en</code>, <code>ja</code> veya
347 <code>x-klingon</code> gibi bir dil kısaltması verilerek atanmışsa
348 <module>mod_negotiation</module> modülünün normal davranışını
349 değiştirerek belirtilen dilde bir teslimat yapılmaya çalışılır.
350 Böyle bir belge yoksa normal <a
351 href="content-negotiation.html">uzlaşım</a> süreci uygulanır.</p>
355 <section id="redirect-carefully">
356 <title><code>redirect-carefully</code></title>
358 <p>İstemciye bir yönlendirme gönderirken sunucuyu daha dikkatli olmaya
359 zorlar. Bu genellikle istemcinin yönlendirmeler konusunda sorunlu
360 olduğu bilindiği takdirde yararlı olur. Bu değişkenin gerçeklenme
361 sebebi, dizin kaynaklarına yönlendirmeler için DAV yöntemlerini
362 kullanan Microsoft'un WebFolders yazılımındaki bir sorundur.</p>
366 <section id="suppress-error-charset">
367 <title><code>suppress-error-charset</code></title>
369 <p><em>2.0.54 sürümünden beri mevcuttur.</em></p>
371 <p>Apache bir isteğe bir yönlendirme ile yanıt verdiğinde istemci
372 yönlendirmeyi kendiliğinden yapmaz veya yapamazsa kullanıcıya yanıtla
373 birlikte gönderilen metin gösterilir. Apache normal olarak bu metni
374 ISO-8859-1 ile kodlar.</p>
376 <p>Ancak, yönlendirmenin yapıldığı sayfa farklı bir karakter kümesine
377 sahipse bazı tarayıcı sürümleri asıl sayfanın karakter kodlaması yerine
378 yönlendirmenin kodlamasını kullanmaya çalışırlar. Bu özellikle Yunanca
379 gibi dillerde hedef sayfanın hatalı yorumlanmasına yol açar.</p>
381 <p>Bu ortam değişkeninin atanması Apache’nin yönlendirme için karakter
382 kümesi belirtmemesini sağlamak suretiyle hatalı tarayıcıların hedef
383 sayfayı yanlış karakter kodlamasıyla yorumlamasını önler.</p>
385 <note type="warning">
386 <title>Güvenlik Uyarısı</title>
388 <p>Hata sayfalarının bir karakter kümesi belirtilmeksizin yollanması,
389 HTTP/1.1 belirtimine uymayan ve karakter kümesini içeriğe bakarak
390 tahmin etmeye çalışan tarayıcılarda (MSIE) karşı siteden betik
391 saldırısı yorumuna sebep olabilir. Girdi verisindeki UTF-7 içerik
392 (istek betimleyici gibi) karşı siteden betik saldırılarını engellemek
393 için tasarlanmış normal önceleme mekanizmalarıyla öncelenmeyeceği için
394 böyle tarayıcılar UTF-7 karakter kodlaması kullanılarak kolayca
400 <section id="proxy"><title><code>force-proxy-request-1.0</code>,
401 <code>proxy-nokeepalive</code>, <code>proxy-sendchunked</code> ve
402 <code>proxy-sendcl</code>, <code>proxy-chain-auth</code>,
403 <code>proxy-interim-response</code>, <code>proxy-initial-not-pooled</code>
406 <p>Bu yönergeler <module>mod_proxy</module> modülünün normal protokol
407 davranışını değiştirirler. Daha ayrıntılı bilgi için
408 <module>mod_proxy</module> ve <module>mod_proxy_http</module>
409 belgelerine bakınız.</p>
414 <section id="examples">
415 <title>Örnekler</title>
417 <section id="misbehaving">
418 <title>Protokolü yanlış yorumlayan tarayıcıların davranışlarının
419 değiştirilmesi</title>
421 <p>Önceki sürümlerde bilinen istemci davranışlarına karşı önlem olarak
422 aşağıdaki satırların <code>httpd.conf</code> içinde bulunması
423 önerilirdi. Fakat, böyle tarayıcılar artık ortalıkta görünmediğinden
424 bu yapılandırmaya da artık gerek kalmamıştır.</p>
428 # Aşağıdaki yönergeler normal HTTP yanıt davranışını değiştirirler.
429 # İlk yönerge Netscape 2.x ve kendini öyle gösteren tarayıcılar için
430 # kalıcı bağlantıyı (keepalive) iptal eder. İkinci yönerge ise HTTP/1.1
431 # protokolü bozuk olan ve 301/302 durum kodlu yönlendirme yanıtları
432 # kullanıldığında kalıcı bağlantıları gerektiği gibi desteklemeyen
433 # Microsoft Internet Explorer 4.0b2 içindir.
435 BrowserMatch "Mozilla/2" nokeepalive
436 BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
439 # Aşağıdaki yönergeler HTTP/1.0 yanıtlarından başkasına yabancı olan
440 # tarayıcılara HTTP/1.1 yanıtlarının gönderilmesini iptal eder.
442 BrowserMatch "RealPlayer 4\.0" force-response-1.0
443 BrowserMatch "Java/1\.0" force-response-1.0
444 BrowserMatch "JDK/1\.0" force-response-1.0</pre>
448 <section id="no-img-log">
449 <title>Resim isteklerinin erişim günlüğüne kaydedilmemesi</title>
451 <p>Bu örnek resim isteklerinin erişim günlüğüne yazılmasını engeller.
452 Bu örnek değiştirilerek belli dizinlerin veya belli konaklardan
453 gelen isteklerin günlüğe kaydedilmesini engellemek amacıyla da
457 SetEnvIf Request_URI \.gif image-request<br />
458 SetEnvIf Request_URI \.jpg image-request<br />
459 SetEnvIf Request_URI \.png image-request<br />
460 CustomLog logs/access_log common env=!image-request
464 <section id="image-theft">
465 <title>“Resim Hırsızlığı” için önlem alınması</title>
467 <p>Bu örnekte sunucunuzda bulunmayan sayfalarda sunucunuzdaki
468 resimlerin kullanılmasının nasıl önleneceği gösterilmiştir. Bu
469 yapılandırma önerilmemekle birlikte nadir durumlarda işe yarar. Tüm
470 resimlerin <code>/siteler/resimler</code> dizini altında tutulduğu
474 SetEnvIf Referer "^http://filan\.fesmekan\.dom/" local_referal<br />
475 # Referrer bilgisi göndermeyen tarayıcılara izin verelim<br />
476 SetEnvIf Referer "^$" local_referal<br />
477 <Directory /siteler/resimler>
479 Order Deny,Allow<br />
481 Allow from env=local_referal
486 <p>Bu teknik hakkında daha ayrıntılı bilgi edinmek için ServerWatch
488 href="http://www.serverwatch.com/tutorials/article.php/1132731"
489 >Diğer sitelerin sizin resimlerinizle donatılmasını engellemek</a>"
490 belgesine bakınız.</p>