web-dev-qa-db-ja.com

.htaccessファイル内の一部のメディアファイルでApache gzip圧縮を無効にする方法

.htaccessファイルを介してApacheサーバーで既に圧縮されている一部のメディアファイルのgzip圧縮を無効にしたいと思います。
理由:たとえば、 jPlayerのサイト 、メディアファイルのgzipエンコードを無効にする必要があります: "メディアファイルはすでに圧縮されており、GZIPはサーバーのCPUを浪費するだけです。AdobeFlashプラグインで問題が発生しますメディアをGZIPした場合。」

現在、gzipが有効になっているとContent-Lengthヘッダーが正しく設定されないという問題が発生しています。そのため、一部のmp3ファイルを SoundManager2 プレーヤーで再生すると、トラックの長さ進行バーが表示されません適切に動作します(おそらく、それがjPlayerのサイトで彼らが言った問題です)。

コンテンツがgzip圧縮されて提供されるかどうかをテストできます here
サーバーでmod_deflatemod_mimemod_rewriteモジュールを有効にしています。
phpinfo()によると、ここに読み込まれたすべてのモジュールのリストがあります:

core mod_log_config mod_logio itk http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_Host mod_authz_user mod_autoindex mod_cgi mod_dav mod_dav_svn mod_authz_svn mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_ssl mod_status

Drupal 6を使用しているので、RewriteRuleはすでにあります。これは次のとおりです:

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

gzipを無効にするためにすでにこれらを試しましたが、機能しませんでした(6つの異なる試行があります!-おそらくそれらのいくつかはApacheのhttpd.confでグローバルに設定しますか?!):

  • # http://www.cyberciti.biz/tips/speed-up-Apache-20-web-access-or-downloads-with-mod_deflate.html
    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?:exe|t?gz|Zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary    
    
  • ## Step 2. here: http://www.mydigitallife.info/how-to-enable-mod_deflate-gzip-compression-on-cpanel-web-hosts/
    <IfModule mod_deflate.c>
    SetOutputFilter DEFLATE
    
    RemoveOutputFilter mp3
    # Don’t compress already-compressed files
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|Zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:avi|mov|mp3|mp4|rm|flv|swf|mp?g)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary
    </IfModule>
    
  • RemoveOutputFilter mp3
    
  • # for files that end with ".mp3"
    <FilesMatch \.mp3$>
    SetEnv no-gzip 1
    </FilesMatch>
    
  • RewriteRule \.mp3$ - [NS,E=no-gzip:1,E=dont-vary:1]
    
  • RewriteRule ^((.*)\.mp3)$ $1.mp3 [NS,E=no-gzip:1,E=dont-vary:1]   
    

正しく機能し、gzip圧縮を無効にする唯一のものですが、global

  • RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
    

このRewriteRuleを使用しない場合のmp3ファイルの応答ヘッダー: http://Pastebin.com/AkUZ6m5Y
このRewriteRuleを使用する場合のmp3ファイルの応答ヘッダー: http://Pastebin.com/b8j3NF6D

17
Sk8erPeter

外部プラグインで使用するためにodpファイルの圧縮を無効にする必要がありました.htaccessファイルに次のルールを追加しただけです

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.odp$ no-gzip dont-vary

そして、サーバーはodpファイルの圧縮を無効にしましたテストする前にブラウザーのキャッシュをクリアしてください

8
Lohith

ディレクティブSetOutputFilter DEFLATEを使用してこれを間違った方法で回避し、すでに何らかの形式の圧縮が含まれているストリームに対してこれを無効にしようとしていますか? notこのディレクティブを使用して、圧縮可能なストリームを圧縮する方がはるかに簡単ではありませんか?例えば。

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript application/ecmascript application/rss+xml
</IfModule>

そして、おそらくVaryヘッダーを追加します:

<IfModule mod_headers.c>
    <FilesMatch "\.(js|css|xml|html)$">
        Header append Vary Accept-Encoding
    </FilesMatch>
</IfModule>

OK、これはあなたが考えていなかった奇妙なタイプを見逃すかもしれませんが、それはあなたの圧縮潜在力の99 +%を達成します。

3
TerryE

Apacheサーバー上のAdobe Flash Playerファイル(SWF)のみでgzip圧縮を無効にするために、これを.htaccessファイルに追加しました。

<IfModule mod_headers.c>
    <FilesMatch "\.swf$">
        RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
    </FilesMatch>
</IfModule>

必要に応じて、他のファイルタイプのgzip圧縮を無効にすることもできます。

<IfModule mod_headers.c>
    <FilesMatch "\.(js|css|swf)$">
        RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
    </FilesMatch>
</IfModule>

メディアで圧縮を使用していないと思います。実際にファイルを圧縮していることを確認しましたか?モジュールはメモリにロードできますが、それはファイルを圧縮しているという意味ではありません。 .htaccessに書き換えルールしかない場合は、コンテンツを圧縮しない可能性があります。

0

これは時代遅れのようです: https://www.varnish-cache.org/docs/3.0/tutorial/compression.html#gzip-and-esi

GZIPおよびESI

Edge Side Includesを使用している場合は、ESIとGZIPが非常にうまく連携していることに注意してください。ワニスはコンテンツを魔法のように解凍してESI処理を実行し、効率的に再圧縮します保管と配送。

0
Bruno