web-dev-qa-db-ja.com

nginxでgzip圧縮を有効にします

ウェブサイトのコンポーネントのgzip圧縮を有効にしようとしています。 Ubuntu 11.04サーバーとnginx 1.2があります。
ウェブサイトのnginx設定で、これがあります

 gzip on; 
#gzip_min_length 1000; 
 gzip_http_version 1.1; 
 gzip_vary on; 
 gzip_comp_level 6; 
 gzip_proxied any; 
 gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss + xml application/atom + xml application/rdf + xml; 
#gzip_buffers 16 8kでした。 
 gzip_buffers 128 4k; #my pagesize is 4 
 gzip_disable "MSIE [1-6] \。(?!。* SV1)"; 

yslowとgoogleの速度測定では、gzipを使用してネットワーク経由の伝送を削減するように勧められています。今curl -I my_js_fileわかった

 curl -I http://www.albawaba.com/sites/default/files/js/js_367664096ca6baf65052749f685cac7b.js
HTTP/1.1 200 OK 
サーバー:nginx/1.2。 0 
日付:日、2013年4月14日13:15:43 GMT 
 Content-Type:application/x-javascript 
 Content-Length:208463 
 Connection: keep-alive 
最終変更日:2013年4月14日日曜日10:58:06 GMT 
可変:Accept-Encoding 
有効期限:2037年12月31日23:55:55 GMT 
 Cache-Control:max-age = 315360000 
 Pragma:public 
 Cache-Control:public 
 Accept-Ranges:バイト

私が間違ったことをしたこと、または圧縮されたコンテンツを取得するにはどうすればよいですか?

30
Alaa

ちょうど変わった gzip_http_version 1.1; することが gzip_http_version 1.0; そしてそれは働いた

11
Alaa

他の人が書いたように、サーバーでgzip圧縮を有効にするだけでは十分ではありません。クライアントは、Accept-Encoding: gzipヘッダー(またはそのスーパーセット)を介して要求でgzip圧縮を要求する必要があります。最新のブラウザにはこのヘッダーが自動的に含まれますが、curlの場合、コマンドに次のいずれかを含める必要があります。

  • -H "Accept-Encoding: gzip":応答にContent-Encoding: gzipヘッダーが表示されるはずです(curlの-vフラグを使用してヘッダーを出力する必要がある場合があります)。 。
  • --compressed:応答ヘッダーにContent-Encoding: gzipが表示されるはずですが、curlは出力する前にコンテンツを解凍することを知っています。
23
lot

あなたの設定に明らかに問題はありません。通常はgzip on&gzip_types application/x-javascriptで十分です。すべてが正常に機能している場合、「Content-Encoding:gzip」が返されます。

注意してください:GOOGLE DEVELOPER TOOLSとの一貫性はずっと高くなっています(カールはブラウザのように動作しません)。

Chromeでは、右クリックして[要素の検査]に移動し、[ネットワーク]に移動して(必要に応じてページをリロードします)、リソースをクリックしてヘッダータブを確認します。出力は次のようになります(コンテンツに注意してください) -エンコードはgzip、yay):

Request URL:https://ssl.gstatic.com/gb/js/sem_a3becc1f55aef317b63a03a400446790.js
Request Method:GET
Status Code:200 OK (from cache)
Response Headersview source
age:199067
cache-control:public, max-age=691200
content-encoding:gzip
content-length:19132
content-type:text/javascript
date:Fri, 12 Apr 2013 06:32:58 GMT
expires:Sat, 20 Apr 2013 06:32:58 GMT
last-modified:Sat, 23 Mar 2013 01:48:21 GMT
server:sffe
status:200 OK
vary:Accept-Encoding
version:HTTP/1.1
x-content-type-options:nosniff
x-xss-protection:1; mode=block

とにかく、コンテンツがgzip圧縮されていないことが確かな場合、私は通常、次のようにして非常に高速に起動して実行します。

## Compression
gzip              on;
gzip_buffers      16 8k;
gzip_comp_level   4;
gzip_http_version 1.0;
gzip_min_length   1280;
gzip_types        text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp;
gzip_vary         on;

コードの代わりにこれを試してみたり、問題を特定したりするために値を1つずつ調整したりできます。

構成を変更した後は、nginxを再起動または再ロードすることを忘れないでください。

また、ログをチェックして、まだ行き詰まっているはずの興味深いものがあるかどうかを確認することも役立ちます。

13
Drew Khoury

/etc/nginx/nginx.conf構成でgzipを有効にする必要がありました。

gzip on;
gzip_disable "msie6";

gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

application/javascriptを標準のgzip_types構成に追加する必要があることに注意してください。

7
czerasz

以下を実行する必要があります。

curl -I --compressed my_js_file

curlがgzipのAccept-Encodingヘッダーを送信するようにする-サーバーは、クライアントがそれを受け入れるというヘッダーを送信した場合にのみコンテンツを圧縮します。

NBあなたが書くことができます:

gzip_disable "msi6"

正規表現を使用してIE 5.5および6で無効にするのではなく、gzipがアクティブである限り常に圧縮されるため、text/htmlをタイプとして指定する必要はありません。

5
junichiro

ここで推測しているだけですが、gzipバッファサイズを増やす必要があると思います。

以下は、ブラウザがドメインからプルダウンするファイルです。右側の数字は、ファイルのダウンロードサイズです。

Files served from domain

スクリーンショットから判断できない場合もありますが、質問で言及したjsファイルを除き、すべてのテキストコンテンツファイルがgzip圧縮されています。スクリーンショットでは、jsファイルは緑色のファイルで、サイズは約200Kです。このファイルサイズは、gzipバッファに指定したサイズ(128K)よりも大きくなります。

Gzip module docs は、gzipバッファーの用途(非圧縮データと圧縮データのどちらに使用されるか)について適切な指標を提供しません。ただし、次の投稿は、バッファーサイズが圧縮されていないファイルサイズよりも大きい必要があることを示しているようです。 NGINX、GZip、およびSSLを含む大きなファイル

5
chue x

これが私のnginx設定であり、動作します。

gzip                on;
gzip_min_length     1000;
gzip_buffers        4 8k;
gzip_http_version   1.0;
gzip_disable        "msie6";
gzip_types          text/plain text/css application/json application/javascript application/x-javasc    ript text/xml application/xml application/xml+rss text/javascript;
gzip_vary           on;

キーポイントはgzip_disable、gzip_disable、gzip_typesだと思います。

3
Haimei

Alaaのように、gzip_http_version 1.0;(以前にバージョンが指定されていなかった)を追加して動作させる必要がありました(Firefox 27.0.0で試しました)。

1
user276648

Alaaと同じ問題が発生しました。この問題は、現在コンピューターにインストールされているウイルス対策ソフトウェアが原因です。

プロキシサーバーとウイルス対策ソフトウェアは、ファイルがクライアントマシンにダウンロードされるときに圧縮を無効にすることができます。そのため、このようなウイルス対策ソフトウェアを使用しているクライアントマシンのブラウザーでWebサイトを実行している場合、または中間プロキシサーバーの背後にあるWebサイトを実行している場合(多くのプロキシは透過的であり、クライアントとウェブサーバー)、この問題の原因である可能性があります。

ウイルス対策を無効にすることでブラウザの問題が解決し、gzip_http_versionを1.0に設定する必要さえありません。

それがあなたを助けることを願っています。

1
mgsxman