Apache HTTP Sunucusu Sürüm 2.4

Apache HTTP Sunucusunu etkileyen ortam değişkenleri iki çeşittir.
İlki, işletim sisteminin denetimindeki ortam değişkenleridir. Bu değişkenlere değer atama işlemi sunucu başlatılmadan önce yapılır. Bunlar yapılandırma dosyalarının içinde kullanılabilir. Ayrıca, istenirse PassEnv yönergesi kullanılarak bunlar CGI betiklerine ve SSI sayfalarına da aktarılabilir.
İkincisi ise, Apache HTTP Sunucusunun kendi ortam değişkenleridir. Bu değişkenlerde saklanan bilgi erişim denetimi, günlük kaydı gibi çeşitli işlemleri denetlemekte kullanılabilir. Değişkenler ayrıca, CGI betikleri gibi harici uygulamalarla iletişim mekanizması olarak da kullanılabilir. Bu belgede bu değişkenler üzerindeki işlemlere ve kullanım şekillerine değinilmiştir.
Bu değişkenlere ortam değişkenleri dense de işletim sisteminin ortam değişkenleri gibi değillerdir. Bunlar sadece Apache ortamında geçerli değişkenler olup işletim sisteminin bu değişkenlerden haberi olmaz. Sadece CGI betikleri ve SSI sayfaları gibi harici uygulamalar tarafından üretilen ortam değişkenleri sistem ortamının değişkenleri haline gelirler. İşletim sistemi ortamına çalışmakta olan sunucudan müdahale etmek isterseniz işletim sisteminizin kabuğu tarafından sağlanan standart ortam müdahale mekanizmalarını kullanmalısınız.

 Ortam Değişkenlerinin Atanması
 Ortam Değişkenlerinin Atanması Ortam Değişkenlerinin Kullanımı
 Ortam Değişkenlerinin Kullanımı Özel Amaçlı Ortam Değişkenleri
 Özel Amaçlı Ortam Değişkenleri Örnekler
 Örnekler| İlgili Modüller | İlgili Yönergeler | 
|---|---|
Apache ortamında bir ortam değişkenine müdahale etmenin en temel
          yolu hiçbir koşula tabi olmayan SetEnv yönergesini kullanmaktır. Bu değişkenleri Apache
          başlatılırken sistem ortam değişkenleri haline getirmek için
          PassEnv yönergesi
          kullanılabilir.
Esnekliği arttırmak için, mod_setenvif modülü ile
          isteğin özelliklerine uygun olarak her isteğe özel değişkenler
          atayabilmek mümkün kılınmıştır. Örneğin, bir değişken sadece isteği
          yapan tarayıcıya özgü bir değerle veya sadece belli bir başlık
          alanınına bağlı olarak atanabilir. Daha da esnek bir mekanizma,
          ortam değişkeni atamak için [E=...] seçeneğinin
          kullanıldığı mod_rewrite modülünün RewriteRule yönergesi ile
          sağlanmıştır.
Son olarak, mod_unique_id UNIQUE_ID
          ortam değişkenine her istek için o isteğin çok özel koşullar altında
          tüm diğer istekler arasında eşsizliğini garanti edecek bir değer
          atar.
Apache yapılandırmasıyla atanan ve kabuğa aktarılan ortam değişkenlerinden başka CGI Belirtiminin gerektirdiği istekler hakkında temel bilgileri içeren ortam değişkenlerinin CGI betikleri ve SSI sayfalarınca atanabilmesi sağlanmıştır.
suexec
            kullanıldığında ortam, CGI betikleri çalıştırılmadan önce
            güvenilir değişkenler kalacak şekilde temizlenir.
            Güvenilir değişken listesi suexec.c içinde
            derleme sırasında tanımlanır.SetEnv yönergesi geç çalıştırılır,
            yani SetEnvIf ve
            RewriteCond gibi
            yönergeler SetEnv ile
            atanan değişken değerlerini görmezler.mod_autoindex ile dizin listesi oluşturulması
            veya bir DirectoryIndex
            için yol aranması gibi bir dahili alt
            istek için sunucu yol araması yaparken isteklere özgü
            ortam değişkenleri alt istekler tarafından miras alınMAZ. Buna ek
            olarak, mod_setenvif modülünün devreye girdiği API
            fazlarından dolayı yapılan alt isteklerde
            SetEnvIf yönergeleri
            ayrı ayrı değerlendirilMEZ.| İlgili Modüller | İlgili Yönergeler | 
|---|---|
Ortam değişkenlerinin başlıca amaçlarından biri CGI betikleriyle iletişim kurmaktır. Yukarıda bahsedildiği gibi CGI betiklerine aktarılan ortam Apache yapılandırmasında atanan değişkenlere ek olarak istek hakkında standart temel bilgileri de içerir. Bu konuda ayrıntılı bilgi edinmek için CGI Öğreticisine bakabilirsiniz.
Sunucu tarafında mod_include modülünün
          INCLUDES süzgeci ile yorumlanan SSI sayfalarında ortam
          değişkenleri echo elemanı ile basılabilir ve sayfayı
          isteğin özelliklerine uygun olarak oluşturmak için ortam
          değişkenleri akış denetim elemanları içinde kullanılabilir. Apache
          ayrıca, yukarıda bahsedildiği gibi standart CGI ortam değişkenli SSI
          sayfalarını da sağlayabilmektedir. Daha ayrıntılı bilgi edinmek için
          SSI Öğreticisine bakabilirsiniz.
Require env ve Require not env
          yönergeleri sayesinde ortam değişkenlerine dayalı olarak sunucuya
          erişim denetim altında tutulabilir. Bunlar SetEnvIf yönergesi ile birlikte
          kullanılmak suretiyle sunucuya erişim isteğin özelliklerine bağlı
          olarak daha esnek bir tarzda denetlenebilir. Örneğin, belli bir
          tarayıcının sunucuya erişimi bu yönergelerle engellenebilir.
Ortam değişkenleri LogFormat yönergesinin %e seçeneği
          kullanılarak erişim günlüğüne kaydedilebilir. Bundan başka,
          CustomLog yönergesi
          sayesinde isteklerin günlüğe kaydedilip kaydedilmeyeceğine ortam
          değişkenlerine dayalı olarak karar verilmesi sağlanabilir. Bunlar
          SetEnvIf yönergesi ile
          birlikte kullanılmak suretiyle günlük kayıtları isteğin
          özelliklerine bağlı olarak daha esnek bir tarzda denetlenebilir.
          Örneğin, gif uzantılı dosyalar için yapılan isteklerin
          günlüğe kaydedilmemesi veya sadece alt ağınızın dışından gelen
          isteklerin günlüğe kaydedilmesini isteyebilirsiniz.
Header yönergesi belli
          bir yanıt başlığının istemciye gönderilip gönderilmeyeceğine belli
          bir ortam değişkeninin varlığına bakarak karar vermek için
          kullanılabilir. Böylece örneğin, belli bir başlığın istemciye
          gönderilmesine istemciden belli bir başlığın alınıp alınmadığına
          bağlı olarak karar verilebilir.
mod_ext_filter tarafından yapılandırılan harici
          süzgeçler ExtFilterDefine yönergesinin disableenv= ve
          enableenv= seçenekleri kullanılarak bir ortam
          değişkenine bağlı olarak etkinleştirilebilir.
RewriteCond
          yönergesinin SınamaDizgesi olarak kullanılan
          %{ENV:değişken} biçemi
          mod_rewrite yeniden yazma motorunun ortam
          değişkenlerine bağlı kararlar almasını mümkün kılar. Yalnız şuna
          dikkat ediniz: mod_rewrite’ta ENV:
          öneki kullanılmadan belirtilen değişkenler ortam değişkenleri
          değillerdir. Onlar mod_rewrite’a özgü diğer
          modüllerden erişilemeyen özel değişkenlerdir.
Birlikte çalışabilirlik sorunları Apache’nin belli istemcilerle
          veri alışverişi sırasında davranışını değiştirmesini gerektirebilir.
          Genellikle SetEnv ve
          PassEnv yönergelerinden
          başka BrowserMatch
          gibi yönergelerle ortam değişkenleri atanarak bunu sağlayan
          mekanizmaların olabildiğince esnek davranabilmesi sağlanabilir.
downgrade-1.0İstek, daha yüksek bir HTTP protokolüyle yapılmış olsa bile HTTP/1.0 isteği olarak ele alınır.
force-gzipDEFLATE süzgeci etkinse tarayıcının tercih ettiği
            kodlama koşulsuz olarak yoksayılarak sıkıştırılmış çıktı
            gönderilir.
force-no-varyİstemciye gönderilmeden önce yanıttan Vary alanının
          çıkarılmasına sebep olur. Bazı istemciler bu alanı gerektiği gibi
          yorumlayamazlar, bu değişken atanarak bu sorunla karşılaşılmamaya
          çalışılır. Bu değişkenin atanması ayrıca
          force-response-1.0 değişkeninin de atanmasına sebep
          olur.
force-response-1.0HTTP/1.0 isteği yapan istemcilere HTTP/1.0 yanıtı verilmesini zorunlu kılar. AOL vekillerindeki bir sorun nedeniyle gerçeklenmiştir. Bazı HTTP/1.0 istemciler HTTP/1.1 yanıtlarında doğru davranmayabilirler; bu değişken atanarak bunların sorunları giderilebilir.
gzip-only-text/htmlBu değişkene "1" değeri atandığında text/html’den
          farklı içerik türleri için mod_deflate modülü
          tarafından sağlanan DEFLATE  çıktı süzgeci iptal
          edilir. Sıkıştırılmış olarak saklanan dosyalar kullanıyorsanız bu
          değişkeni mod_negotiation modülü de dikkate alır
          (kimliğine bakarak sadece gzip için değil, tüm kodlamalar için bunu
          yapar).
no-gzipBu değişken atandığında, mod_deflate modülünün
          DEFLATE süzgeci kapatılır ve
          mod_negotiation modülü kodlanmış kaynak teslimatını
          reddeder.
2.2.12 sürümünden beri kullanılabilmektedir.
Atandığı takdirde, mod_cache artık
        önbelleklenebilecek yanıtları kaydetmeyecektir. Bu ortam değişkeni bir
        yanıtın halihazırda mevcut bir isteğe sunulmak üzere önbellekte olup
        olmadığından etkilenmez.
nokeepaliveBu değişken atandığında, KeepAlive yönergesi iptal edilir.
prefer-languageDeğer olarak en, ja veya
          x-klingon gibi bir dil kısaltması verilerek atanmışsa
          mod_negotiation modülünün normal davranışını
          değiştirerek belirtilen dilde bir teslimat yapılmaya çalışılır.
          Böyle bir belge yoksa normal uzlaşım süreci uygulanır.
redirect-carefullyİstemciye bir yönlendirme gönderirken sunucuyu daha dikkatli olmaya zorlar. Bu genellikle istemcinin yönlendirmeler konusunda sorunlu olduğu bilindiği takdirde yararlı olur. Bu değişkenin gerçeklenme sebebi, dizin kaynaklarına yönlendirmeler için DAV yöntemlerini kullanan Microsoft'un WebFolders yazılımındaki bir sorundur.
suppress-error-charset2.0.54 sürümünden beri mevcuttur.
Apache bir isteğe bir yönlendirme ile yanıt verdiğinde istemci yönlendirmeyi kendiliğinden yapmaz veya yapamazsa kullanıcıya yanıtla birlikte gönderilen metin gösterilir. Apache normal olarak bu metni ISO-8859-1 ile kodlar.
Ancak, yönlendirmenin yapıldığı sayfa farklı bir karakter kümesine sahipse bazı tarayıcı sürümleri asıl sayfanın karakter kodlaması yerine yönlendirmenin kodlamasını kullanmaya çalışırlar. Bu özellikle Yunanca gibi dillerde hedef sayfanın hatalı yorumlanmasına yol açar.
Bu ortam değişkeninin atanması Apache’nin yönlendirme için karakter kümesi belirtmemesini sağlamak suretiyle hatalı tarayıcıların hedef sayfayı yanlış karakter kodlamasıyla yorumlamasını önler.
Hata sayfalarının bir karakter kümesi belirtilmeksizin yollanması, HTTP/1.1 belirtimine uymayan ve karakter kümesini içeriğe bakarak tahmin etmeye çalışan tarayıcılarda (MSIE) karşı siteden betik saldırısı yorumuna sebep olabilir. Girdi verisindeki UTF-7 içerik (istek betimleyici gibi) karşı siteden betik saldırılarını engellemek için tasarlanmış normal önceleme mekanizmalarıyla öncelenmeyeceği için böyle tarayıcılar UTF-7 karakter kodlaması kullanılarak kolayca aldatılabilir.
force-proxy-request-1.0,
    proxy-nokeepalive, proxy-sendchunked ve
    proxy-sendcl, proxy-chain-auth,
    proxy-interim-response, proxy-initial-not-pooled
    Bu yönergeler mod_proxy modülünün normal protokol
    davranışını değiştirirler. Daha ayrıntılı bilgi için
    mod_proxy ve mod_proxy_http
    belgelerine bakınız.
2.4 sürümünden itibaren, mod_cgi modülü ve diğer
        modüllerde HTTP başlıklarının ortam değişkenlerine dönüştürülmesi
        bağlamında Apache daha seçici davranmaktadır. Önce HTTP başlığındaki
        geçersiz karakterlerin tamamı altçizgilere dönüştürülür. Bu, başlık
        zerki yoluyla yapılan karşı-site-betiklerini-çalıştırma saldırısını
        önlemeye yöneliktir. (Bakınız: Unusual Web Bugs, slide 19/20).
Bozuk başlıklar gönderdiği halde bunlara dokunulmamasını gerektiren
        bir istemciniz varsa, mod_setenvif ve
        mod_headers modüllerinin sunduğu yapıyı örnekteki gibi
        kullanarak bu sorunun üstesinden gelebilirsiniz:
#
# Aşağıdaki satırlarla bir istemcinin gönderdiği bozuk
# Accept_Encoding başlıklarının istenildiği gibi işlenmesi
# sağlanabilir.
#
SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1
RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding
    
    Önceki sürümlerde bilinen istemci davranışlarına karşı önlem olarak
          aşağıdaki satırların apache2.conf içinde bulunması
          önerilirdi. Fakat, böyle tarayıcılar artık ortalıkta görünmediğinden
          bu yapılandırmaya da artık gerek kalmamıştır.
# # Aşağıdaki yönergeler normal HTTP yanıt davranışını değiştirirler. # İlk yönerge Netscape 2.x ve kendini öyle gösteren tarayıcılar için # kalıcı bağlantıyı (keepalive) iptal eder. İkinci yönerge ise HTTP/1.1 # protokolü bozuk olan ve 301/302 durum kodlu yönlendirme yanıtları # kullanıldığında kalıcı bağlantıları gerektiği gibi desteklemeyen # Microsoft Internet Explorer 4.0b2 içindir. # BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 # # Aşağıdaki yönergeler HTTP/1.0 yanıtlarından başkasına yabancı olan # tarayıcılara HTTP/1.1 yanıtlarının gönderilmesini iptal eder. # BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0
Bu örnek resim isteklerinin erişim günlüğüne yazılmasını engeller. Bu örnek değiştirilerek belli dizinlerin veya belli konaklardan gelen isteklerin günlüğe kaydedilmesini engellemek amacıyla da kullanılabilir.
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
Bu örnekte sunucunuzda bulunmayan sayfalarda sunucunuzdaki
          resimlerin kullanılmasının nasıl önleneceği gösterilmiştir. Bu
          yapılandırma önerilmemekle birlikte nadir durumlarda işe yarar. Tüm
          resimlerin /siteler/resimler dizini altında tutulduğu
          varsayılmıştır.
SetEnvIf Referer "^http://www\.example\.com/" local_referal # Referrer bilgisi göndermeyen tarayıcılara izin verelim SetEnvIf Referer "^$" local_referal <Directory "/siteler/resimler"> Require env local_referal </Directory>
Bu teknik hakkında daha ayrıntılı bilgi edinmek için ServerWatch üzerindeki "Diğer sitelerin sizin resimlerinizle donatılmasını engellemek" belgesine bakınız.