Apache’de Ortam Değişkenleri - Apache HTTP Sunucusu Sürüm 2.4 (original) (raw)
Bu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.
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.
Ayrıca bakınız:
Ortam Değişkenlerinin Atanması
Temel Ortamda Değişiklik
Apache ortamında bir ortam değişkenine müdahale etmenin en temel yolu hiçbir koşula tabi olmayan [SetEnv](./mod/mod%5Fenv.html#setenv)
yönergesini kullanmaktır. Bu değişkenleri Apache başlatılırken sistem ortam değişkenleri haline getirmek için[PassEnv](./mod/mod%5Fenv.html#passenv)
yönergesi kullanılabilir.
İsteğe Bağlı Şartlı Atamalar
Esnekliği arttırmak için, [mod_setenvif](./mod/mod%5Fsetenvif.html)
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/mod%5Frewrite.html)
modülünün [RewriteRule](./mod/mod%5Frewrite.html#rewriterule)
yönergesi ile sağlanmıştır.
Eşsiz Betimleyiciler
Son olarak, [mod_unique_id](./mod/mod%5Funique%5Fid.html)
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.
Standart CGI Değişkenleri
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.
Bazı Yetersizlikler
- Standart CGI değişkenlerini ortam değişkenlerine müdahale yönergelerini kullanarak değiştirmek veya geçersiz kılmak mümkün değildir.
- CGI betiklerini çalıştırmak için
[suexec](./programs/suexec.html)
kullanıldığında ortam, CGI betikleri çalıştırılmadan önce_güvenilir_ değişkenler kalacak şekilde temizlenir.Güvenilir değişken listesisuexec.c
içinde derleme sırasında tanımlanır. - Taşınabilirlik adına, ortam değişkenlerinin isimleri sadece harfler, rakamlar ve alt çizgi imlerini içerebilir. Bunlara ek olarak ismin ilk karakteri bir rakam olmamalıdır. Değişkenler CGI betiklerine ve SSI sayfalarına aktarılırken bu sınırlamalara uygun olmayan karakterlerin yerlerine alt çizgi imleri konur.
- Bir özel durum, CGI betiklerine ve benzerlerine ortam değişkenleri üzerinden aktarılan HTTP başlıklarıdır (aşağıya bakın). Bunlar büyük harfe dönüştürülür ve sadece tireler altçizgilere dönüştürülür. Eğer HTTP başlığı geçersiz karakter içeriyorsa başlığın tamamı yoksayılır. Böyle bir durumda ne yapılacağı öğrenmek için aşağıya bakın.
- İsteklerin işleme konması sırasında
[SetEnv](./mod/mod%5Fenv.html#setenv)
yönergesi geç çalıştırılır, yani[SetEnvIf](./mod/mod%5Fsetenvif.html#setenvif)
ve[RewriteCond](./mod/mod%5Frewrite.html#rewritecond)
gibi yönergeler[SetEnv](./mod/mod%5Fenv.html#setenv)
ile atanan değişken değerlerini görmezler. [mod_autoindex](./mod/mod%5Fautoindex.html)
ile dizin listesi oluşturulması veya bir[DirectoryIndex](./mod/mod%5Fdir.html#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/mod%5Fsetenvif.html)
modülünün devreye girdiği API fazlarından dolayı yapılan alt isteklerde[SetEnvIf](./mod/mod%5Fsetenvif.html#setenvif)
yönergeleri ayrı ayrı değerlendirilMEZ.
Ortam Değişkenlerinin Kullanımı
CGI Betikleri
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.
SSI Sayfaları
Sunucu tarafında [mod_include](./mod/mod%5Finclude.html)
modülününINCLUDES
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çinSSI Öğreticisine bakabilirsiniz.
Erişim Denetimi
Require env
ve Require not env
yönergeleri sayesinde ortam değişkenlerine dayalı olarak sunucuya erişim denetim altında tutulabilir. Bunlar [SetEnvIf](./mod/mod%5Fsetenvif.html#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.
Şartlı Günlük Kaydı
Ortam değişkenleri [LogFormat](./mod/mod%5Flog%5Fconfig.html#logformat)
yönergesinin %e
seçeneği kullanılarak erişim günlüğüne kaydedilebilir. Bundan başka,[CustomLog](./mod/mod%5Flog%5Fconfig.html#customlog)
yönergesi sayesinde isteklerin günlüğe kaydedilip kaydedilmeyeceğine ortam değişkenlerine dayalı olarak karar verilmesi sağlanabilir. Bunlar[SetEnvIf](./mod/mod%5Fsetenvif.html#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.
Şartlı Yanıt Başlıkları
[Header](./mod/mod%5Fheaders.html#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.
Harici Süzgeçlerin Etkinleştirilmesi
[mod_ext_filter](./mod/mod%5Fext%5Ffilter.html)
tarafından yapılandırılan harici süzgeçler [ExtFilterDefine](./mod/mod%5Fext%5Ffilter.html#extfilterdefine)
yönergesinin disableenv=
veenableenv=
seçenekleri kullanılarak bir ortam değişkenine bağlı olarak etkinleştirilebilir.
URL Kurgulaması
[RewriteCond](./mod/mod%5Frewrite.html#rewritecond)
yönergesinin SınamaDizgesi olarak kullanılan%{ENV:_değişken_}
biçemi[mod_rewrite](./mod/mod%5Frewrite.html)
yeniden yazma motorunun ortam değişkenlerine bağlı kararlar almasını mümkün kılar. Yalnız şuna dikkat ediniz: [mod_rewrite](./mod/mod%5Frewrite.html)
’ta ENV:
öneki kullanılmadan belirtilen değişkenler ortam değişkenleri değillerdir. Onlar [mod_rewrite](./mod/mod%5Frewrite.html)
’a özgü diğer modüllerden erişilemeyen özel değişkenlerdir.
Özel Amaçlı Ortam Değişkenleri
Birlikte çalışabilirlik sorunları Apache’nin belli istemcilerle veri alışverişi sırasında davranışını değiştirmesini gerektirebilir. Genellikle [SetEnv](./mod/mod%5Fenv.html#setenv)
ve[PassEnv](./mod/mod%5Fenv.html#passenv)
yönergelerinden başka [BrowserMatch](./mod/mod%5Fsetenvif.html#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-gzip
DEFLATE
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ıcaforce-response-1.0 değişkeninin de atanmasına sebep olur.
force-response-1.0
HTTP/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/html
Bu değişkene "1" değeri atandığında text/html
’den farklı içerik türleri için [mod_deflate](./mod/mod%5Fdeflate.html)
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/mod%5Fnegotiation.html)
modülü de dikkate alır (kimliğine bakarak sadece gzip için değil, tüm kodlamalar için bunu yapar).
no-gzip
Bu değişken atandığında, [mod_deflate](./mod/mod%5Fdeflate.html)
modülününDEFLATE
süzgeci kapatılır ve[mod_negotiation](./mod/mod%5Fnegotiation.html)
modülü kodlanmış kaynak teslimatını reddeder.
no-cache
2.2.12 sürümünden beri kullanılabilmektedir.
Atandığı takdirde, [mod_cache](./mod/mod%5Fcache.html)
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.
nokeepalive
Bu değişken atandığında, [KeepAlive](./mod/core.html#keepalive)
yönergesi iptal edilir.
prefer-language
Değer olarak en
, ja
veyax-klingon
gibi bir dil kısaltması verilerek atanmışsa[mod_negotiation](./mod/mod%5Fnegotiation.html)
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-charset
2.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.
Güvenlik Uyarısı
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
veproxy-sendcl
, proxy-chain-auth
,proxy-interim-response
, proxy-initial-not-pooled
Bu yönergeler [mod_proxy](./mod/mod%5Fproxy.html)
modülünün normal protokol davranışını değiştirirler. Daha ayrıntılı bilgi için[mod_proxy](./mod/mod%5Fproxy.html)
ve [mod_proxy_http](./mod/mod%5Fproxy%5Fhttp.html)
belgelerine bakınız.
Örnekler
Bozuk başlıkların CGI betiklerine aktarılması
2.4 sürümünden itibaren, [mod_cgi](./mod/mod%5Fcgi.html)
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](./mod/mod%5Fsetenvif.html)
ve[mod_headers](./mod/mod%5Fheaders.html)
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
Protokolü yanlış yorumlayan tarayıcıların davranışlarının değiştirilmesi
Önceki sürümlerde bilinen istemci davranışlarına karşı önlem olarak aşağıdaki satırların httpd.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
Resim isteklerinin erişim günlüğüne kaydedilmemesi
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
“Resim Hırsızlığı” için önlem alınması
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
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.