web-dev-qa-db-ja.com

nginxによるgzip圧縮

私のnginx.confには次のものがあります:

gzip              on;
gzip_static       on;
gzip_buffers      16 8k;
gzip_comp_level   9;
gzip_http_version 1.0;
gzip_min_length   1000;
gzip_types        text/plain text/css image/x-icon image/bmp image/png image/gif image/jpeg image/jpg application/json application/x-javascript text/javascript;
gzip_vary         on;
gzip_proxied any;

したがって、サーバー上の画像のヘッダーをフェッチすると、次のようになります。

spiroo@glamdring:~$ curl -I http://static.mysite.com/g/pics/big_6e1855d844ebca560379139e75942f669655f.jpeg
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 04 Apr 2013 13:00:20 GMT
Content-Type: image/jpeg
Content-Length: 5336
Last-Modified: Mon, 25 Mar 2013 13:28:02 GMT
Expires: Fri, 04 Apr 2014 13:00:20 GMT
Cache-Control: max-age=31536000
Pragma: public
Cache-Control: public, must-revalidate, proxy-revalidate
Accept-Ranges: bytes

しかし、nginx.confでgzip圧縮をオフにすると、Content-Lengthでまったく同じ結果が得られます。

私は何が間違っているのですか?

前もって感謝します。

PS:明確にするために、私はnginxの最後のリリースを持っており、プロキシ(haproxy)の背後にいます。

編集==>

CSSでも同じ問題があります。 jpegは既に圧縮されていると思います。ちなみに、gzipのオン/オフを切り替えると、nginxを再起動します。

これは、cssファイルのヘッダーからのフェッチです。 gzip圧縮の有無にかかわらず同じContent-Lenghtがあります。

spiroo@glamdring:~$ curl -I http://static.mysite.com/css/9a7f503b.css
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 04 Apr 2013 14:21:50 GMT
Content-Type: text/css
Content-Length: 203088
Last-Modified: Tue, 02 Apr 2013 11:34:39 GMT
Vary: Accept-Encoding
Expires: Fri, 04 Apr 2014 14:21:50 GMT
Cache-Control: max-age=31536000
Pragma: public
Cache-Control: public, must-revalidate, proxy-revalidate
Accept-Ranges: bytes

そして、これは私の静的ファイルのnginx構成です:

server {
server_name     static.mysite.com;
root /home/www/mysite/current/web;

location / {
    return 404;
}

location ~ \.(?:jpg|jpeg|js|css|gif|png|swf|ico|pdf)$ {
    expires        365d;
    access_log     off;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

}

2
Jerry

curlはデフォルトではAccept-Encoding: gzipではありません。 curlを取得してgzipを要求するには、-H "Accept-Encoding: gzip,deflate"を使用するか、--compressedを使用して、curlが結果を解凍することを認識できるようにする必要があります。

5
DerfK

写真(jpg/gifなど)はすでに圧縮されています。したがって、Webサーバー上でそれらを圧縮する必要はありません(そして圧縮しようとすべきではありません)。

これは私が圧縮するものの例です:

gzip_types        text/html text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp;
3
Drew Khoury