web-dev-qa-db-ja.com

nginx gzipは有効ですが、gzipはできません

Nginx 1.2.8でgzipを有効にしていますが、何らかの理由で何もgzip圧縮されていません。

Nginxインストール情報:

nginx version: nginx/1.2.8
built by gcc 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) 
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.2.8 --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-pcre --conf-path=/etc/nginx/nginx.conf --add-module=../headers-more-nginx-module-0.19rc1

構成:

user  www-user;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include mime.types;
    default_type  application/octet-stream;
    client_max_body_size 10M;

    sendfile        on;
    keepalive_timeout  65;

    more_clear_headers "Server";

    gzip  on;
    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;

    server {
        server_name test.com;
        root   /www;
        index index.php index.html index.htm;

        listen       80  default_server;

        rewrite ^/(.*)/$ /$1 permanent; #remove trailing slash

        #charset koi8-r;

        #access_log  logs/Host.access.log  main;

        include      general/*.conf;

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \.php$ {

    fastcgi_intercept_errors on;

    fastcgi_pass   unix:/run/php/php-fpm.sock;

    fastcgi_index index.php;

    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

    include        fastcgi_params;

        }
    }
}

単純な静的cssファイルを送信しようとしています。私のnginx構成では、text/cssgzip_typesに含まれています。

Firefoxを使用してファイルを取得しようとすると、fiddlerは受信したコンテンツがgzipされていないことを示しています。

リクエストヘッダー:

GET http://test.com/test.css HTTP/1.1
Host: nextdreamtest2.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __utma=237624223.1052931239.1362029000.1365467381.1365469205.16; __utmz=237624223.1362029000.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); __utmc=237624223; __utmb=237624223
Proxy-Authorization: Basic cHJveHk6RTRRWlNlY0JLU3o0OFh4cWpLNkg=
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

応答ヘッダー:

HTTP/1.1 200 OK
Date: Tue, 09 Apr 2013 01:35:07 GMT
Content-Type: text/css
Last-Modified: Thu, 31 May 2012 08:50:00 GMT
Connection: keep-alive
Content-Length: 1688

サーバーでgzipが有効になっている場合でもContent-Encoding: gzipヘッダーはなく、コンテンツタイプはgzipで圧縮されるように構成されていることに注意してください。


さらに調査した結果、今ではさらに困惑しています。 nginxが実行されているマシン(Ubuntu 12.10)でFireFox 20.0を試しましたが、ファイルは正しくgzip圧縮されています。

Connection  keep-alive
Content-Encoding    gzip <------------------------------
Content-Type    text/html
Date    Tue, 09 Apr 2013 04:23:08 GMT
Set-Cookie  200ceb26807d6bf99fd6f4f0d1ca54d4=7hjir1h44g3dq8hlsihdsrn9v5; path=/; HttpOnly
Transfer-Encoding   chunked  <---------------------

ただし、IE10、FireFox 20、およびChrome 26およびFiddlerを試して、サーバーにアクセスするためにWindows 8マシンのヘッダーを検査する場合、応答はgzip圧縮されません。

Connection  keep-alive
Content-Length  2192 <------------------
Content-Type    text/html
Date    Tue, 09 Apr 2013 04:27:16 GMT

私のnginx.confにはWindows 8マシンを差別するものは何も見当たらないので、これは信じられないほど奇妙です。

何が原因でしょうか?

4
F21

UbuntuのFireFox 20はgzip圧縮されたコンテンツを受信できたが、Windows 8マシンは受信できなかったのを見て、疑わしくなりました。

私のWindows 8マシンで次のことを試しました:IE10、FireFox 20、Chrome 26、フィドラー、カール。彼らがgzipされていないコンテンツを受け取ったことを示したとき、私はすぐに私のインターネットセキュリティスイートを疑いました。

BitDefender Windows 8セキュリティをアンインストールした後(パフォーマンスも最高ではありませんでした)、Windows 8マシン上のブラウザーとクライアントがgzip圧縮されたコンテンツを受信するのを見ることができます。

BitDefenderは、おそらくパケットを解凍して、クライアントに到達する前にウイルスとフィッシング素材を分析していました。

それにもかかわらず、これでほぼ1日を浪費した後、私はそれを再度インストールすることはなく、別の製品を検討します。

9
F21

デフォルトのタイプをtext/htmlに変更してみてください-application/octet-streamのデフォルトのタイプはgzip可能ではありません。

0
Marcel