web-dev-qa-db-ja.com

IIS7でgzip圧縮を取得するにはどうすればよいですか?

IIS7の静的および動的圧縮をインストールし、アプリケーションweb.configレベルで2つのVirtual Folder値を設定しました。私が理解しているように、サーバーまたはサイトレベルで圧縮を有効にする必要はもうありません。web.configファイルを使用して、フォルダーごとに圧縮を管理できます。

アプリのgzipをカスタマイズするために設定した.configファイルには2つの設定があります。

<httpCompression dynamicCompressionDisableCpuUsage="90"
    dynamicCompressionEnableCpuUsage="0">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
  <dynamicTypes>
    <remove mimeType="*/*"/>
    <add mimeType="*/*" enabled="true" />
  </dynamicTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
    dynamicCompressionBeforeCache="true" />

ただし、アプリケーションを実行すると、ページサイズが同じであるため、gzipが使用されていないことがはっきりとわかります。また、FireFoxで YSlow を使用しています。これにより、ページがgzip圧縮されていないことも確認できます。

ここで何が欠けていますか? IIS6では、ファイルタイプを指定し、0〜10の圧縮レベルを設定するだけの簡単な問題でした。デフォルトはファイルタイプをカバーしているようで、どこにもレベルが表示されないため、ファイルタイプまたは圧縮レベルを指定するために文書化する必要はありません。

68
Russ

これについては、iis 7ベータ中にforums.iis.netにスレッドがありました。その男はモジュールがインストールされていなかったことが判明しましたが、あなたはあなたの最初の文からそれを除外したように聞こえます。

彼に対するマイクロソフトの重要なアドバイスは、失敗した要求のトレースを有効にして、何が問題なのかを見つけることでした。これはおそらくIIS7の最も評価の低い機能の1つですが、確かに最も強力な機能の1つです。

  • IIS Managerを開きます。
  • サイトに移動し、アクションペイン(右端)で、[構成]セクションの下にある[失敗した要求トレース...]をクリックします。
  • 「有効にする」をクリックします。
  • 次に、機能ビューで、「失敗した要求トレース規則」をクリックします。 [追加]をクリックし、次にステータスコードに200を入力し、次に[完了]をクリックします。

アクションウィンドウに[失敗した要求トレース]が表示されない場合は、[役割サービスの追加]ウィザード(正常性と診断\トレース)を使用するか、Webプラットフォームインストーラーを使用して、サーバーに機能を追加する必要があります(Products\Server\IIS:トレース)、IIS Managerを閉じて再度開きます。

次に、テストを再実行します。これにより、調査するためのログ情報が生成されます。

C:\ inetpub\logs\FailedReqLogFiles\w3svcxを確認します。 fr000xx.xmlという名前のファイルの束が表示されます。ブラウザでそれらのいずれかを開きます。 (ところで、これらのファイルをどこかにコピーする場合は、freb.xslがあることを確認してください。また、freb.xslを削除しないでください。削除する場合は、ディレクトリ全体を削除するか、IISは、フォルダーごとに1回だけ作成します。)

[リクエストの詳細]タブをクリックし、[リクエストトレースの完了]を選択します。ページで「圧縮」を検索します-いくつかの領域で見つけることができます。 1回は静的コンテンツ用、もう1回は動的コンテンツ用です。

どちらも見つからない場合、IISは正しく構成されていません。それらを見つけた場合、compression_successとcompression_doが後に続くはずです。成功は自明です。 「do」はそれが何をしたかを示します-私の場合、「OriginalSize 1462784 CompressedSize 179482」を示しました

あなたのものが機能していないので、うまくいけば、問題を解決するのに役立つ何か違うものが見えるでしょう。

完了したら、Webサイトのアクションウィンドウで失敗した要求トレースを無効にして、これを必ずオフにしてください。

62
JohnW

同様の問題があり、IIS7がここで動的CPUベースの調整を行うことがわかりました。

http://www.iis.net/ConfigReference/system.webServer/httpCompression

dynamicCompressionDisableCpuUsage

オプションのuint属性。

動的圧縮が無効になるCPU使用率の割合を指定します。

注:この属性は、動的圧縮がオフになるCPUの上限として機能します。 CPU使用率がdynamicCompressionEnableCpuUsage属性で指定された値を下回ると、動的圧縮が再び有効になります。

デフォルト値は90です。


dynamicCompressionEnableCpuUsage

オプションのuint属性。

動的圧縮が有効になるCPU使用率の割合を指定します。値は0から100の間でなければなりません。平均CPU使用率は30秒ごとに計算されます。

注:この属性は、CPUの下限として機能し、それより下では動的圧縮がオンになります。 CPU使用率がdynamicCompressionDisableCpuUsage属性で指定された値を超えると、動的圧縮が無効になります。

デフォルト値は50です。

デフォルトに注意してください-IIS7のCPU使用率が90%に達すると、CPU使用率が50%を下回るまですべての動的gzip圧縮コンテンツが無効になります

また、GZIPの実際のCPUコストに関する優れた推奨事項とベンチマークもここにあります。

http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx

簡単に言えば、定期的に200 kbを超える動的ページを定期的に持っているのでなければ、それは問題ではありません。

28
Jeff Atwood

JohnWのすばらしいアドバイスに従って、私もログを有効にして犯人を見つけましたが、失敗の理由は異なっていました。

STATIC_COMPRESSION_NOT_SUCCESS 
Reason 14 
Reason NOT_FREQUENTLY_HIT

要するに、ページに十分な頻度でアクセスしないと、IIS7は圧縮する価値があるとは見なさないようです。これは少し奇妙に思えます。それでも、この場合は、ローカルマシンでテストしようとしているだけなので意味があります。

このページ によると、デフォルトでは、ページが「頻繁にヒットする」ために10秒以内に2回ヒットする必要があるように見えます。本当にしたい場合は、applicationHost.config(%systemroot%\ Windows\System32\inetsrv\config)のデフォルトを上書きできます。少なくとも私にとっては、ロックされた属性なので、独自のweb.configでオーバーライドすることはできません。

<serverRuntime frequentHitThreshold="1" />

また、私はSOにすでにこの回答がありました: IIS7では、gzipされたファイルはそのままではありません

21
Gavin

[プログラムの追加と削除]で動的圧縮をインストールすることで問題を解決しました。

5
Eduardo

Web.configファイルのsystem.webServerセクションで、次の行を追加します。

<remove fileExtension=".js" />  
<mimeMap fileExtension=".js" mimeType="application/x-javascript" />  

IIS7の圧縮スキームはデフォルトで有効になっていますが、単一のjavascript mimeタイプ(圧縮されたapplication/x-javascript)のみをマップします。上記の行を追加すると、IISにmimeタイプのすべての.jsファイルが与えられ、圧縮が機能するようになります。

5
jvenema

静的圧縮をオンにします。動的圧縮は、asp、php、aspxなどの動的ページ用です。

圧縮のIIS構成リファレンス へのリンクは次のとおりです。

3
Darren Kopp

私にとってそれは設定であることが判明しました

noCompressionForProxies

ここでプロキシを使用しているので...

0
µBio