はてなブックマーク
X
Bluesky
Facebook
Pocket

さくらのレンタルサーバでDEFLATE(gzip)で圧縮する

更新:

ウェブサイト(ページ)にアクセスすると、HTML、CSS、JavaScriptなど必要なリソース(データ)をサーバーからダウンロードして表示している。 サーバーから必要なデータを転送する際、最近はそのまま転送せず、いったんデータを圧縮してからクライアント(ユーザー)側へ転送しているサーバーも少なくない。

大手のサイトなら圧縮していない方が珍しい。 最近はレンタルサーバーでも、何も設定しなくてもデフォルトで圧縮が有効になっている。

私が使用したことがあるレンタルサーバーでは、以下のような圧縮方式が使われている。

レンタルサーバー プラン Content-Encoding
(圧縮方式)
さくらのレンタルサーバ スタンダート、ビジネス なし
エックスサーバー スタンダート br (Brotli)
XServerビジネス 共有・スタンダート gzip
シンレンタルサーバー ベーシック br (Brotli)
コアサーバー V1 CORE-A gzip
コアサーバー V2 CORE-Y br (Brotli)
ConoHa WING・ベーシック gzip

同じ会社でもプランによって圧縮方式が異なる場合がある。 例えば、コアサーバーは V1 は gzip だが、V2 は br (Brotli) が使われている。

データの圧縮を行うレンタルサーバーが多い中、さくらのレンタルサーバはデータを圧縮していない。 さくらのレンタルサーバは、他社と比べてページの表示にやや時間がかかる印象があるかもしれないが、もしかするとデータ圧縮の有無が多少影響しているかもしれない。

ただし、圧縮処理自体にも多少時間を要するため、必ず速くなるとは限らない。 とはいえ、その処理は一瞬なのでデータサイズが小さい方が結果的にページの表示が速くなる可能性がある。

特に夜間などインターネット回線が混んでいる時間帯は、私の環境では100KBを超えたあたりからやや転送に時間がかかる印象。 200KBくらいだとさらに時間がかかる。 それらがテキストの場合、圧縮すればかなりファイルサイズが小さくなり、転送に掛かる時間を短縮できる。

DEFLATE(gzip)の設定

さくらのレンタルサーバは、デフォルトではデータが圧縮されていないが、mod_deflate(Apacheのモジュール)がインストールされているようなので、DEFLATEを使うことができる。

ただし、コントロールパネルなどには圧縮に関する項目はない。 自分で .htaccess に記述する必要がある。 以下のように記述する。

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico|webp|avifs?)$ no-gzip dont-vary

1行目で DEFLATE を有効にする。 これだけだと、すべてのデータが圧縮されてしまう。 画像ファイルは基本的に既に圧縮されているので、2行目で画像関連を除外している。 リクエストURIの末尾がこれらの拡張子に一致する場合、gzipが適用されないという意味。 なお、SVGは画像だが、中身はテキストなので基本的に圧縮するとファイルサイズが小さくなる。

また、以下のように個別に書くこともできる。

AddOutputFilterByType DEFLATE text/html

これは、MIMEタイプ(Content-Type)が text/html のもののみ圧縮する。

SetOutputFilter と AddOutputFilterByType を同時に書いている例も見られるが、AddOutputFilterByType のみで有効になる。 詳しくはApacheのサイト mod_deflate - Apache HTTP サーバ を参照。

以下のように複数のMIMEタイプを指定することもできる。

AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript

MIMEタイプを複数指定する場合、スペース区切りで1行で書くこともできる。

AddOutputFilterByType DEFLATE text/html text/css application/javascript

ウェブサイトでよく使うデータとしては以下のようなものがある。 ただし、SVG以外の画像を除く。

主なデータ MIMEタイプ
HTML text/html
CSS text/css
JavaScript application/javascript
SVG image/svg+xml
XML、RSSなど application/xml
テキスト text/plain

現在、mod_deflate が使える状態だが、さくらインターネットの公式には特にアナウンスがないので、もし mod_deflate が使えなくなった場合、サーバーエラーが発生する。

以下のように記述すると、mod_deflate がインストールされている場合のみ実行することができる。

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico|webp|avifs?)$ no-gzip dont-vary
</IfModule>

mod_deflate - Apache HTTP サーバ などには古いブラウザへの対応も書かれているが、現状 DEFLATE(gzip)に対応していないブラウザを使用している人はほぼいないので、気にする必要はないと思われる。

ちなみに mod_brotli はインストールされていないようで使用できない。

動作確認

以上の設定を済ませた後、ウェブサイトにアクセスし、ブラウザのディベロッパーツール(開発ツール)を使って確認すると、Content-Encoding が gzip になっている。

ディベロッパーツールによる確認方法は HTTPレスポンスヘッダー・リクエストヘッダー情報をウェブブラウザで表示・確認する方法 を参照。

メリット

前述のとおり、データを圧縮することで転送するデータのサイズが小さくなり、ページが速く表示される可能性がある。

また、さくらのレンタルサーバは転送量が無制限となっているが、gzipで圧縮することで一応データの転送量を減らせる。

さらにモバイルのデータ通信でサイトを見ている人にとっては、少しでも通信量が少ない方がありがたい。 一応モバイルフレンドリーといえるかもしれない。


はてなブックマーク
X
Bluesky
Facebook
Pocket