Apache HTTP Server高速化用モジュールmod_spdyを試す

Updated / Published

本稿で取り上げたmod_spdyで利用できるSPDYはSPDY/3までで、Firefox36、Chrome40からSPDY/3のサポートを終了し、HTTP/2となるSPDY/4のサポートを優先することになりました。mod_spdy(SPDY/3)が有効なブラウザももはや限られていますので、Apache2.4であればHTTP/2(SPDY/4)に対応させることができるmod_h2のモジュールを組み込むことを検討されるのが良いでしょう。

先月、GoogleよりHTTPS をランキング シグナルに使用しますということが発表されたように、ランキングアルゴリズムのシグナルに新たにHTTPS(HTTP over TLS / Transport Layer Security)接続で提供していることが採用され、HTTPS接続で提供していることが暗号化された安全なサイトであるとして優遇されるようになりました。そして、Googleはすべてのサイト所有者に対して、HTTPからHTTPSへと切り替えることを推奨しています。

もちろんすべてのサイトがHTTPS接続になってしまえば優遇措置云々の恩恵はありませんが、逆に言い換えるとHTTPSが少数であるいまだからこそ早く切り替えれば切り替えるほどHTTPS接続による優遇措置の恩恵にあやかることができます。ただし今現在この優遇措置がどれぐらいのプラス加点の影響になっているのかというと、

このランキングの変更は、グローバルでクエリの 1% 未満にしか影響しませんが、これから長い期間をかけて強化していきます。

ということですので、現時点では優遇措置の加点はほとんどありませんが、今後はHTTPとHTTPSとで日に日に差をつけていくことになると予想されます。

しかしながら、HTTPS接続に切り替えるとよく言われるのがレスポンスが悪くなる(表示速度が遅くなる)ということです。そこで、少しでもレスポンスが良くできる(表示速度が速くなる)方法について検討してみましょう。

SPDYを利用する

SPDY(スピーディー)は、次世代の通信プロトコルであるHTTP/2の起草となったGoogleが提唱している高速化を目的とした通信プロトコルです。TLS接続の上にセッション層を追加し、単一のSPDYセッションで複数のリクエストを送受信でき、加えてブラウザがページを表示する際、付随するデータの先読みを行う機能をもっています。

もっとも多く利用されているWebサーバであるApacheにおいても2年前からApache HTTP Server高速化用モジュールmod_spdyとしてGoogle Developersにて配布されています。なお、SPDYにはバージョンがあり、mod_spdyとして提供されているのはSPDY/3です。

YouTubeの動画では通常のHTTPSだと4.3秒かかっていたのが、mod_spdyで1.9秒にまで高速化されている様子がわかります。ただし、このSPDY、対応しているブラウザが真新しいものに限られ、Google Chrome 10以降, Firefox 13以降, Internet Explorer 11以降, Android 3.0以降, Safari 8(OS X 10.10およびiOS 8)以降という対応状況となっています。

Apacheへmod_speyをインストールする

すでにHTTPS接続が行えているのであれば、mod_spdyの利用開始に必要な手順は簡単です。ここではCent OS 64bit版/Fedora 64bit版へのインストール手順を例に解説します(Debian, Ubuntuの場合は、Google Developersより対応版を確認・ダウンロードし、yumコマンドをapt-getコマンドに置き換えてください)。

wget https://dl-ssl.google.com/dl/linux/direct/mod-spdy-beta_current_x86_64.rpm
sudo yum localinstall mod-spdy-beta_current_x86_64.rpm

たったこれだけでOKです。以下のファイル群が追加されています。

/etc/cron.daily/mod-spdy
/etc/httpd/conf.d/load_ssl_with_npn.conf
/etc/httpd/conf.d/spdy.conf
/usr/lib64/httpd/modules/mod_spdy.so
/usr/lib64/httpd/modules/mod_ssl_with_npn.so

設定ファイルは/etc/httpd/conf.d/load_ssl_with_npn.conf/etc/httpd/conf.d/spdy.confです。/etc/httpd/conf.d/spdy.confSpdyEnabled Onになっていること等を確認したらApacheを再起動します。

sudo service httpd start

mod_spdyが有効になっていると、対応ブラウザではx-mod-spdyというレスポンスヘッダが返ってきます。

なお、2014年6月にGoogleはmod_spdyをApacheの団体に寄贈したことが発表されているので、将来登場するApache2.6やApache3.0では、SPDYが次世代の通信プロトコルのベースとなってApache本体単体でHTTP/2(SPDY/4)に対応している予定です。

HSTSヘッダーの設定とHSTS Preload listへの登録

UAに対してアクセスしてきた際に必ずHTTPSで接続するように設定する方法として、HSTS(HTTP Strict Transport Security)という仕組みがあります。HSTSをHTTPヘッダーに設定しておくことで、最初にアクセスしてきた際に以降のアクセスを必ずHTTPSで接続するようにキャッシュさせておくことができます。

しかしこの仕組みでは最初のアクセス時においては必ずしもHTTPSで接続が試みられるわけではないため、HSTS Preload listというものが存在し、このリストにURLを登録しておくことで、現時点ではChrome, Firefox, Safariの3製品のブラウザからのアクセスであれば、初回アクセス時も含めて常にHTTPSで接続させることを標準にすることができます。

まず、HSTSをHTTPヘッダーに設定するために.htaccessなどのサーバ設定ファイルに以下を記述します。

Header always set Strict-Transport-Security "max-age=10886400; includeSubDomains; preload"

SSLの証明書がシングルのみなどの事由の場合はサブドメインを含めないようにincludeSubDomains;は削除してください。

設定が完了したら、HSTS Preload listに登録することができるHSTS Preload SubmissionにURLを送信して、HSTS Preload listに登録しておきましょう。