server {
gzip on;
...
}
このセクションでは、圧縮されたファイルを送信するだけでなく、応答の圧縮または解凍の設定の仕方を説明します。応答の圧縮によって、しばしば転送データのサイズをとても減らすことができます。しかしながら、実行時に圧縮が発生するために、パフォーマンスに否定的な影響を与えるかなりのオーバーヘッドも追加されます。圧縮はクライアントに応答が送られる前に実施され、(例えば、プロキシされるサーバによって)まだ圧縮されていない全ての応答に対して適用することができます。
圧縮の有効化
圧縮を有効にするには、gzip ディレクティブの on パラメータを指定します。
server {
gzip on;
...
}
デフォルトでは、NGINXはtext/html
MIME タイプの応答のみ圧縮します。text/html
以外のMIMEタイプの応答も圧縮するには、gzip_types ディレクティブに追加のMIMEタイプを指定してください。
gzip_types text/plain application/xml;
圧縮する応答の最小のサイズを指定するにはgzip_min_length ディレクティブを使います。デフォルトでは、20バイトに設定されていますが、増やすことができます。
gzip_min_length 1000;
デフォルトでは、NGINXはプロキシされたリクエスト(プロキシサーバからくるリクエスト)への応答は圧縮しません。プロキシサーバからきたリクエストだという根拠は、リクエスト中のViaフィールドの存在によって決定されます。これらの応答も圧縮するように設定するには、gzip_proxied ディレクティブを使います。このディレクティブにはNGINXが圧縮しなければならないプロキシされたリクエストの種類をパラメータにとります。例えば、プロキシサーバにキャッシュされないようなリクエストへのみの応答を圧縮するのが道理でしょう。このために、gzip_proxied ディレクティブには Cache-Control
ヘッダが応答の中にあるかを調べるためのパラメータがあり、フィールドがno-store, no-cacheまたは private の時に応答を圧縮します。更に、Expires
ヘッダフィールドの値を調べるパラメータも持っています。次の例では、これらのパラメータが、Authorization
ヘッダフィールド(認証された応答はユーザ固有のものであり、一般的にはキャッシュされません)の存在チェックをするauthパラメータと一緒に設定されています。
gzip_proxied no-store no-cache private expired auth;
他のほとんどのディレクティブと同じく、親の設定を継承したディレクティブを使って、圧縮設定のディレクティブをhttp, serverまたは locationコンテキストの中で指定することができます。
gzip圧縮の全体としての設定は、以下のようになるでしょう:
server {
gzip on;
gzip_types text/plain application/xml;
gzip_proxied no-store no-cache private expired auth;
gzip_min_length 1000;
...
}
解凍の有効化
gzip エンコードメソッドを使った応答をサポートしないクライアントもあります。同時に、gzipでデータを圧縮して保持するのが望ましい場合や、または応答を動的に圧縮してキャッシュにそれらを保持するのが望ましい場合があります。これらのクライアントや圧縮を許容するクライアントをうまく提供するには、NGINXはgzipを提供しないクライアントのために動的にデータに解凍したり
実行時の解凍を有効にするには、gunzip ディレクティブを使います。
location /storage/ {
gunzip on;
...
}
gunzip ディレクティブは、同じコンテキストの中でgzipディレクティブの中で gzip directive:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
このディレクティブはデフォルトの構築に含まれない、個々の moduleの中で定義されることに注意してください。
圧縮ファイルの送信
通常のファイルをクライアントに渡すのではなく、圧縮したバージョンのファイルを渡すために、gzip_static ディレクティブを適切なコンテキストの中でonに設定します。
location / {
gzip_static on;
}
この場合、/path/to/file
ファイルに対応するリクエストを処理しますが、NGINXは/path/to/file.gz
を調べて送信しようとするでしょう。もしこのファイルが存在しないか、クライアントがgzipをサポートしない場合は、通常のファイルが送信されるでしょう。
gzip_static ディレクティブは その場での圧縮を有効化しないことに注意してください。それはあらかじめなんらかの圧縮ツールによって圧縮されたバージョンのファイルを単に提供します。実行時にコンテンツ(静的なものだけでなく)を圧縮するには、gzipディレクティブを使います。
また、このディレクティブはデフォルトの構築に含まれない、個々の moduleの中で定義されることに注意してください。
- High-performance Load Balancing
- Application-aware Health Checks
- Massively-scalable Content Caching
- Sophisticated Streaming Media Delivery
- Advanced Activity Monitoring
- DevOps On-the-Fly Reconfiguration
… backed by Nginx, Inc. dedicated support.