Sun, 05 Sep 2010 (平成22年) [長年日記]
_ lenny で gzip 圧縮を使う
上の「Web デザイナのための HTML チューニング入門」のほうで YSlow が紹介されていて、いつ入れたかすっかり忘れてしまってたのだけど YSlow はインストールしてあるのでこの日記をチェックしてみたら、"Compress components with gzip" が F と評価された。設定しているつもりだったのだけど、どうやら忘れていたらしい。ということで、調べてみると mod_deflate を使うようだ。mod_filter と組み合わせるらしい。
/etc/apache2 に潜ってみると mods-available とか mods-enabled とかいうディレクトリがあって、ここをいじればいいらしいということはわかった。どうするのが Debian 流なのかググッてみたら「ubuntu(Debian 系 Linux) の Apache2.2 の設定管理」というページが見つかった。a2enmod というコマンドを使うとのこと。
$ sudo a2enmod filter $ sudo a2enmod deflate
こうして、必要なモジュールを組み込んだら「サイトのコンテンツ全てを gzip 圧縮する」に掲載されてた設定をちょっとだけ変えて、/etc/apache2/mods-enabled/deflate.conf にこう書いた。
<IfModule mod_deflate.c> # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html FilterDeclare Compression CONTENT_SET FilterProvider Compression DEFLATE Content-Type $text/plain FilterProvider Compression DEFLATE Content-Type $text/css FilterProvider Compression DEFLATE Content-Type $application/xhtml FilterProvider Compression DEFLATE Content-Type $application/xml FilterProvider Compression DEFLATE Content-Type $application/xhtml+xml FilterProvider Compression DEFLATE Content-Type $application/rss+xml FilterProvider Compression DEFLATE Content-Type $application/atom+xml FilterProvider Compression DEFLATE Content-Type $application/x-javascript FilterProvider Compression DEFLATE Content-Type $image/svg+xml FilterProvider Compression DEFLATE Content-Type $text/html FilterProvider Compression DEFLATE Content-Type $application/javascript FilterChain Compression # Don't append Vary heder for specific files SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|lzh|exe)$ dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary Header append Vary Accept-Encoding env=!dont-vary </IfModule>
で、apache を再起動したら……
... waiting Syntax error on line 33 of /etc/apache2/mods-enabled/deflate.conf: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration failed!
mod_headers というモジュールもいるらしい。
$ sudo a2enmod headers
今度は apache が正常に起動したので YSlow で再度チェックしてみたら、css がまだ圧縮できてない。deflate.conf に text/css は設定してあるし、HTTP ヘッダもチェックしてみたけど text/css として送られてきてるし、何が問題なのか現時点では不明。
原因追求はまた後日。なんかくやしい。
追記: おや、今もう一度 YSlow でチェックしてみたら CSS の圧縮ができてることになってる。ブラウザのキャッシュの影響でもあったのかな。疑問は残るけど、動作しているのだからまぁいいや。