こんにちは、Webプログラマの篠田です。
大阪では寒い日が続いています。
個人的に、夏の暑さも堪えますが、冬の寒さも苦手な典型的もやしっ子は、こたつに入りながら春の来るのを待ちたい気持ちです。
前回「『gzip圧縮』でWebサイトを高速化しよう!【mod_deflate編】
」では、「mod_deflate」を利用した「gzip圧縮」方法をご紹介しました。
今回は、サーバー負荷を軽減して「gzip圧縮」を行う方法「mod_rewrite」をご紹介します。
この記事の目次
「mod_rewrite」を使って「gzip圧縮」を実現する理由
「mod_deflate」を利用した「gzip圧縮」方法は、記述内容も少なくサイトへの実装が非常に簡単です。
ですが、レンタルサーバー(特に、低価格な共用サーバー)によっては、サーバー負荷を懸念され「mod_deflate」の利用ができないものもあります。
その代案の1つとして「mod_rewrite」による「gzip圧縮」方法を選択するという場合もあります。
その他にも、サーバー負荷の軽減を目的として、あえて「mod_rewrite」を利用する場合もあります。
「mod_rewrite」を使っての「gzip圧縮」の注意点
「mod_rewrite」を利用した「gzip圧縮」方法は、事前に「gzip圧縮」を行ったファイルが必要となります。
そのため、「gzip圧縮」ファイルが無い状態で.htaccessを書き換えても、「gzip圧縮」転送は利用できません。
また、別途定期的な「gzip圧縮」処理の必要になりますので、注意しましょう。
事前に「gzip圧縮」されたファイルを用意するので、「mod_deflate」よりもサーバーに負荷が少ないという所以です。
サーバーで「gzip圧縮」を行う
「gzip圧縮」を行う場合、最も簡単なのはサーバーのコンソール画面で行う方法です。
下記のコマンドを、「gzip圧縮」を行いたいファイルがあるディレクトリで行います。
1 |
# gzip -c style.css > style.css.gz |
「gzip」コマンドを実行して対象のファイルを、「gzip圧縮」することができます。
注意が必要なのは、「gzip」コマンドをオプション無しで実行すると、元のファイルが消えてしまう点です。
※ブラウザのリクエストに必要なのは「gzip圧縮」されたファイルのみなので、実体がなくてもページは表示されます。
ただし、すべてのブラウザが「gzip圧縮」に対応している訳ではないので、保険で実体はおいておくのが良いです。
「-c」オプションを付けることで、圧縮元のファイルを残して、圧縮ファイルを作成することができます。
これで、「gzip圧縮」ファイルの準備はできました。
.htaccessで「gzip圧縮」を有効化
最後に、.htaccessに「gzip圧縮」ファイルをブラウザに対して送信する設定になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<IfModule mod_rewrite.c> #mod_rewriteを有効化 RewriteEngine on #ブラウザからの「gzip圧縮」リクエストがあるかを確認 RewriteCond %{HTTP:Accept-Encoding} gzip #要求されているファイルの拡張子を取得(今回はjsとcssのみ) RewriteCond %{REQUEST_URI} (\.js|\.css)$ #要求されたファイル名に「.gz」の拡張子をつけたファイルがあるかを確認 RewriteCond %{REQUEST_FILENAME}\.gz -s #最後にリクエストされたファイルから「gzip圧縮」済みファイルに置換します。 RewriteRule .* %{REQUEST_URI}.gz [L] </IfModule> #gzip版cssファイルタイプの変更 <FilesMatch "\.css\.gz$"> ForceType text/css AddEncoding x-gzip .gz </FilesMatch> #gzip版jsファイルタイプの変更 <FilesMatch "\.js\.gz$"> ForceType application/x-javascript AddEncoding x-gzip .gz </FilesMatch> |
これで、.htaccessの設定は完了です。
最後の「FilesMatch」設定は、通常「gzip圧縮」されたファイルは「application/gzip」または「application/x-gzip」として認識されます。
それでは、本来のCSSやJavaScriptとしてブラウザが読み込めないので、それぞれの「gzip圧縮」ファイルをCSSのファイルタイプ、JavaScriptのファイルタイプに変換するという処理が必要となります。
まとめ
「gzip圧縮」の情報は多くありますが、「mod_deflate版」か「mod_rewrite版」で、.htaccessの書き方も変わりますが、大きく異なる点は「gzip圧縮」ファイルを用意する必要があるかどうかです。
この点を間違えると、せっかくの設定が意味をなさなくなりますので、ご注意ください。