2012年4月4日水曜日

Serversman@VPS(debian:32bit)でSPDY


httpがとろいので改良すべくGoogleが生み出したSPDY(スピーディー)が、
このところの次世代httpに関する議論のなかで話題に上っています。
調べてみると発表は2010年だったようで、結構時間が経っています。
発表当時私も興味を持ってドキュメントなど読んでみましたが、
単なる読み物程度で終わっていました。
そのとき仕入れて今でも覚えてるのは
  • アドレスを"spdy://"とかするわけではなく、httpのバージョン打刻がspdyになってるっぽい。
  • TCP複数張らなくても1本で複数の論理セッションを張るかんじ。
程度のことです。

ところで、google chromeはSPDYに早くから対応していることは知っていましたが、
実際に使われていると聞いて驚きました。
というわけで確認です。
chromeで"chrome://net-internals/#spdy"を開くと
SPDYでの接続状況が見られます。
gmail (google apps アカウント含む)で同時に3つログインしていると
"mail.google.com:443"に対するストリーム数が3となっています。
普通のプロキシサーバ経由でもちゃんと使えています。
SPDYの場合、サーバ側から単体でレスポンス投げてプッシュっぽくすることができるそうですが、
gmailをchromeで開いているときに新着メールがすぐ反映されるのは
もしかするとそういうことかもしれません。

こうなってくると私もSPDYに対応したくなってきました。
Serversman@VPS(debian:32bit)で設定してみることにします。
SPDYサーバについては選択肢がいろいろあるようですが、
すでに動作しているApache 2.2 があるので、
これにmod-spdyを加えるのがいいでしょう。
このあたりを参考にしながら進めます。
以下を実行します。
$ cd ~/
$ mkdir depot_tools
$ cd depot_tools
$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools
$ cd ..
$ mkdir mod_spdy
$ cd mod_spdy
$ export PATH="$PATH":~/depot_tools/depot_tools
$ gclient config "http://mod-spdy.googlecode.com/svn/trunk/src"
ところが
Your python version 2.5 is unsupported, please upgrade.
なるエラーが出ます。
"~/depot_tools/depot_tools/gclient.py"を調べてみて
pythonのバージョンは2.6以上が必要ということがわかりました。
一応
$ su -
# apt-get update
# apt-get upgrade python
# exit
を実行してみましたが2.5.2までしかあがらなかったので、
バージョン2系列の最新版をソースから入れて対応することにしました。
以下を実行しました。
$ su -
# cd /usr/local/src
# wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2
# tar jxf Python-2.7.2.tar.bz2
# cd Python-2.7.2
# ./configure
# make
# exit
$ cd ~/mod_spdy
$ export PATH=/usr/local/src/Python-2.7.2:"$PATH":~/depot_tools/depot_tools
$ gclient config "http://mod-spdy.googlecode.com/svn/trunk/src"
$ gclient sync --force
$ cd src
$ ./build_modssl_with_npn.sh
$ cp mod_ssl.so /tmp/mod_ssl.so
$ su -
# cd /usr/lib/apache2/modules
# cp mod_ssl.so mod_ssl.so.org
# cp /tmp/mod_ssl.so ./
# a2enmod ssl
# /etc/init.d/apache2 restart
# exit
$ make BUILDTYPE=Release
$ su
# cp out/Release/libmod_spdy.so /usr/lib/apache2/modules/mod_spdy.so
# echo "LoadModule spdy_module /usr/lib/apache2/modules/mod_spdy.so" > /etc/apache2/mods-available/spdy.load
# echo "SpdyEnabled on" > /etc/apache2/mods-available/spdy.conf
# a2enmod spdy
# /etc/init.d/apache2 restart
# exit
これで、chromeから設定したサーバにSSLで接続すればSPDYが利用されているはずです。
アクセスした状態でchromeの別のページで"chrome://net-internals/#spdy"を開くと
sessionのHOSTにそのサーバの名前が表示されています。
そのIDをクリックすると詳細も見られます。

まあ私の個人のサイトごときがSPDYに対応したところで大した効果はないのですが、
一ソフトウェアエンジニアとしてこれぐらいの貢献はしとかないとと思うのでした。
あとSSLだとセッションの都合上バーチャルホストが使えないので、
SSL必須なSPDYが標準になってしまうとちょっと困ったことになります。
できればSSLがなくても動作するような規格にはなってほしいですね。
そういう意味ではマイクロソフトの意見に一部賛同します。

0 件のコメント:

コメントを投稿