IIS 7/7.5 でコンテンツをgzip圧縮して配信する


IIS7以降の静的コンテンツの圧縮機能についてのまとめ(動的は未検証)。デフォルトでは、閾値ファイルサイズ以上のHTML/CSSなどをgzipしてくれるようになっています(deflateは指定できない模様)。

GUI上で主な設定は完結しますが、細かい設定はappcmdなども併用しないと出来ないようですので、設定にこだわりたい方は注意。

GUI設定

「静的コンテンツの圧縮」は、次の箇所で設定が可能です。appcmdで指定する、対象ファイルも含めて、サーバー単位で細かな条件を決定する事になります。既定では、サーバーレベルで、静的コンテンツの圧縮はOnになっています。

  1. サーバー レベル:On/Off, 閾値ファイルサイズ、圧縮したファイルの保管場所、使用容量
  2. サイト レベル、フォルダ・仮想フォルダ レベル:On/Offのみ

サーバー レベルの画面:

IISマネージャ > サーバー名 > 「サーバー名 ホーム」 上の 「圧縮」アイコン (画面はIIS7の初期状態)

httpCompress IIS7

「圧縮」の設定項目:

  • 動的なコンテンツの圧縮を有効にする
  • 静的なコンテンツの圧縮を有効にする
  • 静的な圧縮:
    • 次の値より大きいファイルのみ圧縮する (バイト)
         既定値:256 バイト (IIS7.5は 2700バイト?)
    • キャッシュ ディレクトリ
         既定値:%SystemDrive%inetpubtempIIS Temporary Compressed Files
         制限:NTFS 形式パーティションのローカルドライブ/非圧縮/非共有
    • アプリケーション プール単位のディスク容量の制限 (MB)
         既定値:アプリケーション プールあたり 100 MB

 □参考:technet – 圧縮を構成する (IIS 7)

appcmd設定

appcmd.exe (%Windir%system32inetsrv)を使うと、GUIでの設定内容に加えて、圧縮するファイルの種類を「MIMEの種類」を元に指定できます。デフォルト値はある程度適切だとは思いますが、こだわる場合には設定を変更するのが良いかと。なお編集前には、applicationHost.configをバックアップしておくと安心です。

なお、簡単にしか確認していませんが、IIS7とIIS7.5では、デフォルトで登録されているmimeTypeが異なるようなので、混在環境の場合には、設定を統一したほうが良さそうです。

圧縮の設定を確認する

現在の設定をXMLで取得する例:

appcmd list config /section:httpCompression

ざっくりファイルで確認例:

次のファイルをテキストエディタなどで確認して、 を探す。
applicationHost.config (%Windir%system32inetsrvconfig)

mimeTypeを追加する

text/xml を追加する例(以下を一行で実行):

appcmd set config /section:httpCompression /+staticTypes.[mimeType='text/xml',enabled='true'] /commit:apphost

mimeTypeを削除する

text/xml を削除する例(以下を一行で実行):

appcmd clear config /section:httpCompression /staticTypes.[mimeType='text/xml'] /commit:apphost

 □参考:KB:969062 – IIS 7.0 で HTTP 圧縮用のコンテンツ タイプを追加する方法

疑問

動作確認を行ってる中で浮かんだ疑問達。全部解決してるわけじゃないのですが、同じ疑問を持った人がいるかもと思いメモしておきます。

  • IIS7のデフォルトで設定されている ”application/javascript” は “application/x-javascript” の間違いじゃない?IIS7.5だと”application/x-javascript”だよ。
  • IIS7の場合は、mimeTypeの追加・削除後には、IISの再起動が必要?
  • 次の値より大きいファイルのみ圧縮する (バイト)の閾値って、何を基準なのかわからない。ファイルサイズじゃなさそうなんだけども。。。
  • 次の値より大きいファイルのみ圧縮する (バイト)の閾値って、IIS7.5で大きな値に変更された?
  • staticTypesのmimeType記述順は、動作には関係なさそうだけど、その理解でOK?

動作確認

クライアントサイド:
FirefoxのLiveHTTPHeaders, Fiddlerなどを使って、ResponseHeaderを見て、次のレスポンスがあればOKです。

Content-Encoding: gzip

サーバーサイド:
圧縮されたコンテンツは、キャッシュディレクトリにgzip後のファイルが保持されていますので、フォルダを見に行くと確認ができます。ファイル名・タイムスタンプは同じだけど、内容はgzipされてるファイルが存在しています。

既定値:
%SystemDrive%inetpubtempIIS Temporary Compressed Files

その他

IIS7.5でも、特に圧縮機能に変更はないようです。(GUI画面の比較をしてみて)

なお、IIS8の場合も、次を読む限り、機能には変更がないように思われます。
technet IIS8 – 圧縮 (機能)

ただ、今回の検証中にでてきた、XMLベースの差分を考えると、デフォルト設定などがチューニングされているのかもしれません。

, ,

Comments are closed.