SMART LLC

速度改善 (4) ApacheでKeep-Aliveを有効にして接続処理を削減

公開日:2015/02/23

GTmetrixでスピードテストしたらEnable Keep-Aliveて項目に引っかかった。
Keep-Aliveの機能とレンタルサーバでの設定方法をメモする。

Keep-Alive

Keep-Aliveはwebサーバの持つ、クライアントとの接続を持続(keep alive)する機能のことだった。
ブラウザがwebページを読み込む時、最初はwebページ本体だけをダウンロードして、そこに記述された必要なファイル(CSSや画像)を1つ1つ追加でダウンロードする。
この時、Keep-Aliveが無効だと1ダウンロード毎に接続を終了するためファイル数の数だけ接続処理が発生する。
「接続開始→ページ本体のダウンロード→接続終了→接続開始→CSSファイルのダウンロード→接続終了」みたいな。
そこで、Keep-Aliveを有効にして接続を終了せずに続けてダウンロードすれば無駄な処理がなくなるねて話。
「接続開始→ページ本体のダウンロード→CSSファイルのダウンロード→接続終了」みたいな。
読み込むファイルの数だけ接続開始プロセスと接続終了プロセスがなくなるので負荷が減って速度が上がる。
が、接続を持続する=サーバのリソースを消費し続けるのでサーバの処理能力とかクライアントの数によっては逆に負荷がかかって遅くなることも考えられる。
状況によって無効にしたり、持続時間やリクエスト数を調整する必要がある。

関連ディレクティブとデフォルト値

ApacheのKeep-Aliveに関する設定値は3つ。
core - Apache HTTP ServerでVersion 2.0のデフォルト値を確認した。
KeepAliveディレクティブが有効無効のスイッチ。デフォルト値はOn(有効)。
KeepAliveTimeoutディレクティブが持続時間。デフォルト値は15(秒)。
MaxKeepAliveRequestsディレクティブが1回の接続で受け付けるリクエスト数。デフォルト値は100。
Keep-Aliveはデフォルトでは有効らしい。
ドメインキングではサーバの負荷を軽減するためか、無効にしてあった。
KeepAliveTimeoutとMaxKeepAliveRequestsはデフォルト値のまま。
大抵のページは1ページ読み込むのに15秒もいらないし100ファイルもないと思う。
このHPならKeepAliveTimeoutは3秒、MaxKeepAliveRequestsも20リクエストで足りそう。

ドメインキングの場合

はりきって設定しようとするも、今回もレンタルサーバの壁に阻まれる。
上記3ディレクティブはhttpd.confじゃないと設定できなかった(:3_ヽ)_
かろうじて有効無効だけは.htaccessを使って設定する方法があった。

.htaccessに記述。

<IfModule mod_headers.c>
	Header set Connection keep-alive
</IfModule>

再度GTmetrixでチェックしてクリアできたことを確認(σ・∀・)σOK!

未だにCSSがまとめられてなくてブラウザキャッシュを有効にしてない。
Bootstrapか何かCSSフレームワークの導入を検討しよう。

SHARE