Aracılığıyla paylaş


IIS 6 veya IIS 7.x'te IIS Sıkıştırma sorunlarını giderme

Şunlar için geçerlidir: Internet Information Services 6.0, Internet Information Services 7.0 ve sonraki sürümleri

Genel Bakış

IIS 6 veya 7 web uygulamalarınız için HTTP Sıkıştırma'nın etkinleştirilmesi, site performansını artırmanın bir yoludur.

IIS'yi tamamen yönetmek için gereken sıkıştırma özelliklerinin çoğu yönetici GUI'sinin kullanımına sunulmaz. Yalnızca bir açma veya kapatma düğmesi sunar. Bu nedenle, HTTP sıkıştırmasını tamamen etkinleştirmek için, metabase.xml dosyasını güncelleştirmek için IIS Yöneticisi dışında bir araç kullanmanız gerekir. Kullanılan en yaygın araç, IIS yükleme dizinine dahil edilen adsutil.vbs aracıdır.

Bu makale sıkıştırmayı yapılandırmanıza yardımcı olur ve IIS sıkıştırmasının IIS 6 ve IIS 7.x'te çalışmama nedenlerinin yaygın nedenlerini tanımlar.

Bu sorun gidericide kullanılan araçlar

  • Fiddler
  • İşlem İzleyicisi
  • Metatabanı ACL'si
  • IIS 7 FREB izlemesi

Doğrulama

Sıkıştırmanın çalışıp çalışmadığını belirleme

IIS sunucusunun sıkıştırılmış yanıt gönderip göndermediğini belirlemenin tek yolu, istemci isteğinin ve sunucu yanıtının ağ izlemesini analiz etmektir. İstemciden gelen istek aşağıdaki HTTP İstek Üst Bilgisini içermelidir:

HTTP: Accept-Encoding =gzip, deflate

Bu, sunucunun istemcinin sıkıştırılmış bir yanıt almaya istekli olduğunu ve sıkıştırmayı desteklediğini bilmesini sağlar. Buna karşılık, sunucudan sıkıştırılmış bir yanıt aşağıdaki HTTP Yanıt üst bilgisini ve bir değeri içerir:

HTTP: Content-Encoding = gzip

Aşağıdaki ekran görüntüleri, sıkıştırma çalışmadığında Fiddler aracının çıkışını gösterir:

Transformatör sekmesinde HTTP Sıkıştırma'nın Sıkıştırma Yok olarak ayarlandığı ekran görüntüsü.

Transformatör sekmesinde devre dışı bırakılan HTTP Sıkıştırma bölümünün ekran görüntüsü.

Sıkıştırma sorunlarını giderme

Sıkıştırma sorunlarını gidermek için aşağıdaki adımları gerçekleştirin:

  1. IIS 6 veya IIS 7'de Sıkıştırma'yı etkinleştirin.

    IIS Yöneticisi'nden Web Siteleri düğümüne sağ tıklayın, Özellikler'i ve ardından Hizmetler'i seçin.

    Statik dosyaları sıkıştır seçili ve Geçici dizin boyutu üst sınırı sınırsız olarak ayarlanmış HTTP sıkıştırmasının ekran görüntüsü.

    Varsayılan değerleri içeren etkin Sıkıştırma seçeneklerinin ekran görüntüsü.

  2. Sıkıştırma klasörünü ve izinlerini belirtin.

    IIS, sıkıştırılmış dosyaları yapılandırılabilir bir klasörde depolar. Varsayılan olarak, %windir%\IIS Temporary Compressed Files IIS 6 ve %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files IIS 7 içindir.

    IIS_WPG(IIS 7 için IIS_IURS) bu klasör için tam denetim iznine sahip olmalıdır. Bu tür bir izin sorununu gidermek için İşlem İzleyicisi'ni kullanın.

  3. sıkıştırmanın Metabase.xml etkinleştirilip etkinleştirilmediğini denetleyin.

    Doğru düğümlerdeki metatabanında sıkıştırma açık değildir. Sıkıştırma yapılandırması için üç metatabanı düğümü vardır:

    • w3svc/filters/compression/parameters
    • w3svc/filters/compression/gzip
    • w3svc/filters/compression/deflate

    Düğümü yapılandırmak /parameters zorunludur. Ardından, düğüm veya /deflate her ikisini de yapılandırabilirsiniz/gzip. Bu, yalnızca gzip, deflate veya parametre düğümlerini yapılandırmanın çalışmayacağı anlamına gelir. ve /gzip düğümlerini /parameters yapılandırdığınızda Gzip sıkıştırma düzeni etkinleştirilir. ve /deflate düğümlerini /parameters yapılandırdığınızda Sıkıştırma düzeninin söndürilmesi etkinleştirilir. Son olarak, üç düğümü de yapılandırdığınızda hem GZip sıkıştırması hem de Sıkıştırmayı söndür seçeneği etkinleştirilir.

  4. IIS 6 için metatabanı iznini denetleyin.

    Varsayılan olarak, IIS_WPG için Okuma, Güvenli Olmayan Okuma, Numaralandırma Anahtarları ve Yazma izinlerine sahiptir /LM/W3SVC/Filters.

    İzinler beklenmeyen bir değişiklik nedeniyle kaldırıldıysa veya güvenlik sağlamlaştırıldıysa IIS sıkıştırmayı başlatamaz.

    IIS 6 metatabanı ACL'sini doğrulamak ve değiştirmek için metaacl.vbs kullanın. Daha fazla bilgi için bkz . Varsayılan Metatabanı ACL'si.

    Uygulama havuzu kimliğinin (veya IIS_WPG genel olarak grubun) metatabanı anahtarı W3SVC veya Filtreler'e Okuma ve Yazma erişimi yoksa, hata koşulu COMPRESSION_DISABLED Bir Windows için Kurumsal İzleme (ETW) izlemesinde günlüğe kaydedilir.

    ETW İzleme

    IISCompression: STATIC_COMPRESSION_NOT_SUCCESS - IIS has been unsuccessful doing static compression
    Reason: COMPRESSION_DISABLED
    
  5. Metabase.xml dinamik veya statik sıkıştırmanın kapalı olup olmadığını denetleyin.

    Üç yapılandırma düğümünün (/parameters, /gzipve /deflate) her birinde statik ve/veya dinamik sıkıştırmayı etkinleştirme seçeneğiniz vardır. .txt ve .html gibi dosya türleri için statik sıkıştırmayı HcDoStaticCompression etkinleştirmek için anahtarı 1 (veya TRUE) olarak ayarlamanız gerekir. .asp, .aspx, .asmx veya .exe gibi dosya türleri için dinamik sıkıştırmayı HcDoDynamicCompression etkinleştirmek için anahtarı 1 (veya TRUE) olarak ayarlamanız gerekir.

    Örneğin, düğümde /parameters dinamik sıkıştırma ayarlamak için adsutil.vbs kullanarak aşağıdaki komutu çalıştırın:

    cscript.exe adsutil.vbs SET w3svc/filters/compression/parameters/HcDoDynamicCompression TRUE
    

    Önceki komutun çıktısı şöyle görünür:

    HcDoDynamicCompression          : (BOOLEAN) True
    

    IIS7'de

    <system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
    </system.webServer>
    
  6. Sıkıştırmak istediğiniz dosya türünün ve /deflate düğümlerindeki uygun Dosya Uzantıları bölümlerinde /gzip listelenip listelenmediğini denetleyin.

    ve/veya HcDoStaticCompression anahtarlarıyla sıkıştırmayı etkinleştirdikten sonra, gerçekte hangi dosya türlerinin HcDoDynamicCompression sıkıştırılması gerektiğini belirtin. STATIK sıkıştırma varsayılan olarak .htm, .html ve .txt gibi dosya türlerini kullanır ve DINAMIK sıkıştırma .asp, .dll ve .exe kullanır. .aspx gibi farklı dosya türlerini sıkıştırmak istiyorsanız, kullandığınız sıkıştırma türüne bağlı olarak ve veya /deflate düğümlerindeki /gzip uygun dosya uzantısı bölümüne ekleyin. Statik dosya sıkıştırma (.html, txt ve xml gibi) için dosya uzantılarını özelliğine HcFileExtensions ekleyin. Dinamik sıkıştırma için (.asp, .aspx ve .asmx gibi) özelliğine HcScriptFileExtension ekleyin.

    Statik dosyalar için

    adsutil.vbs SET w3svc/filters/compression/gzip/HcFileExtensions "htm" "html" "txt"
    
    adsutil.vbs GET w3svc/filters/compression/gzip/HcFileExtensions
    

    Önceki komut aşağıdaki çıkışı gösterir:

    HcFileExtensions : (LIST)  (3 Items)
    "htm"
    "html"
    "txt"
    

    Dinamik dosyalar için

    adsutil.vbs SET w3svc/filters/compression/gzip/HcScriptFileExtensions "asp" "dll" "exe" "aspx"
    adsutil.vbs get w3svc/filters/compression/gzip/HcScriptFileExtensions
    

    Önceki komut aşağıdaki çıkışı gösterir:

    HcFileExtensions : (LIST)  (4 Items)
    "asp"
    "dll"
    "exe"
    "aspx"
    

    IIS7'de

    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="1000">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    </httpCompression>
    <system.web.extensions>
    <scripting>
        <scriptResourceHandler enableCompression="false" />
    </scripting>
    </system.web.extensions>
    

    Not

    veya HcScriptFileExtensions özelliklerini doğru söz dizimi ile yapılandırmanız HcFileExtensions gerekir. Sondaki boşluklar veya gereksiz tırnak işaretleri veya satır başı, özelliğin yanlış yapılandırılmasına neden olur. Ne yazık ki, fazladan alan eklerseniz adsutil.vbs bir hata göstermez, bu nedenle çok dikkatli olmanız gerekir. Ayrıca, değerleri bir komut istemine veya metabase.xml dosyasına (metatabanı doğrudan düzenleme) kopyalayamaz veya yapıştıramazsınız ve el ile yazmalısınız.

  7. Sıkıştırmanın ana düzeyde ayarlandığını, ancak alt düzeydeki bir ayar tarafından geçersiz kılınmadığını denetleyin.

    Sıkıştırma düzeyi etkinleştirilmiş w3svc/filters/compression olabilir. Ancak, web sitesi veya uygulama düzeyinde bir ayar tarafından geçersiz kılınıyor olabilir.

    Örneğin, düzeyi olarak ayarladıysanız HcDoDynamicCompression TRUE w3svc/filters/compression ve varsayılan web sitesi için olarak ayarlandıysaFALSE, varsayılan web DoDynamicCompression sitesi isteklerine yanıtlar için dinamik sıkıştırma gerçekleşmez.

  8. Bir virüsten koruma programının sıkıştırılmış dosyaların kaydedildiği dizini taramış olup olmadığını denetleyin.

    IIS çalıştıran bir sunucuda sıkıştırma etkinleştirildiğinde ve IIS sıkıştırma dizininden bir HTTP isteği sunulduğunda, beklenen dosya yerine 0 baytlık bir dosya döndürülebilir.

    Not

    Bu belirtileri yalnızca HTTP Statik Sıkıştırma etkinse görebilirsiniz.

    Bunun nedeni, IIS sunucusunda çalışan bir virüsten koruma yazılımının IIS sıkıştırma dizinini taramasıdır.

    Bu nedenle, IIS sıkıştırma dizinini virüsten koruma yazılımının tarama listesinden dışlamanız gerekir.

  9. İstenen URL'nin, yürütülen DLL dosyasına geçirilen parametrelerin bir parçası olarak eğik çizgi içerip içermediğini denetleyin.

  10. ISAPI filtrelerinin istek veya yanıt üst bilgilerini değiştirip değiştirmediğini denetleyin.

    GÖNDERME işlemini bir ISAPI yapıyor ve varlıkla birlikte tüm HTTP üst bilgileri kümesini adresine HTTP_COMPRESSION::DoDynamicCompressiongöndermiyor. DoDynamicCompression ISAPI'den tüm verileri almadığından yanıtı sıkıştıramıyoruz. Üçüncü taraf ve/veya Microsoft dışı ISAPI'lerin, üst bilgileri HTTP üst bilgileri için amaçlanmış işlevde varlık gövdesine veya varlık gövdesine yönelik işleve yerleştirerek veya herhangi bir üst bilgi sağlamayarak yaptığı görülmüştür. Bu durumda, ISAPI filtresi SF_NOTIFY_SEND_RESPONSE veya AddResponseHeaders veya dinamik sıkıştırma başarısız olur. ISAPI'nin üst bilgileri ve varlığı sırasıyla doğru konumlara yerleştirmesi gerekir.

  11. Yanıt durum kodunun 200'den farklı bir şey olup olmadığını denetleyin. IIS 6 veya 7'de yalnızca HTTP 200 durumuna sahip yanıtlar sıkıştırılır.

    Durum kodları 200'den farklı olan yanıt sıkıştırılmaz. Aynı başarıya ulaşmak için bir HTTPModule yazmanız gerekir.

  12. İsteğin bir Via: headerVia headers içerip içermediğini denetleyin, isteğin bir ara sunucu aracılığıyla IIS'ye geldiğini gösterir.

    Çoğu proxy sıkıştırma üst bilgisini doğru işlemez ve istemcilere olması gereken durumlarda sıkıştırılmış veriler sağlamaz. Bu nedenle, isteğin Via üst bilgisi olduğunda, sıkıştırılmış yanıtlara varsayılan olarak izin verilmez. Metatabanı anahtarını olarak Trueayarlayarak HcNoCompressionForProxies bunu geçersiz kılabilirsiniz.

  13. İsteğin statik bir sayfaya yönelik olup olmadığını ve yanıtın belge alt bilgisi içerip içermediğini denetleyin. Belge alt bilgileri statik sıkıştırmanın başarısız olmasına neden olur.

  14. Statik sıkıştırmanın çalışıp çalışmadığından denetleyin. IIS'de kök düzeyinde bir joker uygulama eşlemesi yüklüyse bu durum oluşabilir. Örneğin, sunucudaki .html veya .txt uzantıları için uygulama eşlemelerimiz var ve bu, IIS'nin .txt isteklerinizi statik değil dinamik istekler olarak değerlendirmesine neden olur ve .txt dinamik sıkıştırma listesinde bir uzantı olmadığından sıkıştırılamaz.

  15. IIS Sıkıştırma ve Accept-Encoding: identity alanının mevcut olup olmadığını denetleyin.

    RFC2616 başına, istekte bir Accept-Encoding alan varsa ve sunucu üst bilgisine göre Accept-Encoding kabul edilebilir bir yanıt gönderemiyorsa, sunucu 406 (Kabul Edilemez) durum koduyla bir hata yanıtı göndermelidir. İstekte alan yoksa Accept-Encoding , sunucu istemcinin herhangi bir içerik kodlamasını kabul ettiğini varsayabilir. Bu durumda, "kimlik" kullanılabilir içerik kodlarından biriyse, farklı bir içerik kodunun istemci için anlamlı olduğu konusunda ek bilgiler olmadığı sürece sunucu "kimlik" içerik kodunu kullanmalıdır.

  16. IIS sıkıştırma sorununu gidermek için ETW izlemesi kullanıp kullanmadığınızdan denetleyin.

    Windows için Olay İzleme (ETW), Windows işletim sisteminin HTTP istekleriyle ilgili sorunları gidermenize olanak tanıyan bir özelliğidir.

    IIS sıkıştırma sorununu giderme adımları şunlardır.

    1. IISProviders.txt adlı bir metin dosyası oluşturun ve dosyaya takip içeriği yerleştirin." IIS: WWW Server" sağlayıcı adıdır, 0xFFFFFFFE tüm olaylar için izleme, 5 ise ayrıntılı düzey anlamına gelir.

    2. Bir komut istemi açın ve aşağıdaki komutu çalıştırın.

      logman start trace compressionTrace -pf IISProviders.txt -ets
      
    3. Sorunu yeniden oluşturun.

    4. İzlemeyi durdurmak için aşağıdaki komutu çalıştırın.

       logman stop trace compressionTrace -ets
      
    5. İzlemeyi metin dosyasına dönüştürün.

      İzleme raporu, ikili izleme verilerini metne dönüştürür ve komutunu çalıştırdığınız tracerpt dizinde iki dosya oluşturur:

      tracerpt compressionTrace.etl
      
      • Summary.txt, hangi sağlayıcıların kullanıldığı da dahil olmak üzere izleme oturumuyla ilgili genel ayrıntıları içerir.

      • DumpFile.csv, gerçek izleme verilerini metin biçiminde içerir.

    6. Yararlı bilgileri bulmak için izleme dosyasını okuyun. dumpfile.csv açın ve COMPRESSION_NOT_SUCCESS gibi bir anahtar sözcük bulun. Bir örnek aşağıda verilmiştir:

      IISCompression, STATIC_COMPRESSION_NOT_SUCCESS, 0x000008B0, 129744354075770195, 0, 0, {00000000-0000-0000-0700-0060000000bd}, "NO_MATCHING_SCHEME", 0, 0
      

    Bu hata NO_MATCHING_SCHEME, bu uzantı veya Accept-Encoding için sıkıştırma düzeni eşleşmeleri olmadığı anlamına gelir. Sıkıştırma hatalarının ayrıntılı listesi için bkz . Sıkıştırma hataları listesi.

  17. IIS sıkıştırma sorununu gidermeye yönelik FREB izlemesinin kullanılıp kullanılmadiğini denetleyin.

    Ayrıntılı adımlar için bkz . IIS 7'de İzleme Kullanarak Başarısız İsteklerde Sorun Giderme.

    Sıkıştırma sorunlarını gidermek için IIS 7 FREB izlemesini kullanma örneği aşağıda verilmiştır.

    Hata iletilerini kullanarak sıkıştırma sorunlarını izleme işleminin ekran görüntüsü.

Sıkıştırma hataları listesi

Sıkıştırma hatalarının ayrıntılı listesi için aşağıdaki tabloya bakın.

Not

Aşağıdaki nedenler hem IIS 6 hem de IIS 7 için geçerlidir.

Neden Açıklama
NO_ACCEPT_ENCODING İstemci tarafından gönderilen Accept-Encoding yok.
COMPRESSION_DISABLED uygun yapılandırma bulunamadığından sıkıştırma devre dışı bırakıldı.
NO_COMPRESSION_10 Sunucu 1.0 isteklerini sıkıştıracak şekilde yapılandırılmadı.
NO_COMPRESSION_PROXY Sunucu, ara sunucu isteklerini sıkıştıracak şekilde yapılandırılmadı.
NO_MATCHING_SCHEME Bu uzantı/Accept-Encoding için sıkıştırma düzeni eşleşmez.
UNKNOWN_ERROR Bilinmeyen hata.
NO_COMPRESSION_RANGE Sunucu aralık isteklerini sıkıştıracak şekilde yapılandırılmadı
FILE_TOO_SMALL Sıkıştırma eşiğinden küçük dosya.
FILE_ENCRYPTED Dosya şifrelenir.
COMPRESS_FILE_NOT_FOUND Sıkıştırılmış kopya yok.
COMPRESS_FILE_STALE Sıkıştırılmış kopya güncel değil.
NO_MATCHING_CONTENT_TYPE Sunucu, bu uzantı için content-Type'ı sıkıştıracak şekilde yapılandırılmadı.
HEADERS_SENT_TWICE Aynı yanıt için iki kez gönderilen üst bilgiler.
NO_HEADER_SENT Varlık gövdesi göndermeden önce Üst Bilgi gönderilmedi.
NOT_SUCCESS_STATUS Yanıt durum kodu başarılı değil (200).
ALREADY_CONTENT_ENCODING Yanıtta zaten bir içerik kodlaması var.

Not

Aşağıdaki nedenler yalnızca IIS 7 için geçerlidir.

Neden Açıklama
FOOTER_ENABLED Statik dosyalar için belge alt bilgisi etkinleştirildi.
NOT_FREQUENTLY_HIT URL sıkıştırmayı gerekçelendirmek için yeterince sık istenmedi.
FAIL_TO_COMPRESS Sıkıştırılmış kopya oluşturulamadı.

Daha Fazla Bilgi