Nginx以上に早いと噂のHTTPサーバー"h2o"をCentOSに導入、その後ベンチマーク結果を追記します。
ソースコードからビルドする必要があるのでDevelopment Tools等の事前準備をします。
# yum groupinstall “Development Tools”
# yum install curl curl-devel libarchive libarchive-devel expat expat-devel zlib zlib-devel openssl cname
# rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
↑参考URLではこのようになっているが、これを実行するとアクセスできないので(RepoForge ”旧RPMForge” 終了している)
以下を実施する for centos6.x
# yum install http://ftp.riken.jp/Linux/repoforge/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# yum install libyaml-devel –enablerepo=rpmforge
h2o のソースコードをコンパイル。
# cd /usr/local/src
# git clone https://github.com/h2o/h2o.git
# cd h2o
# cmake -DWITH_BUNDLED_SSL=on .
# make h2o
# make install
makeに失敗するorz.
# make h2o
[ 0%] Built target bundled-ssl
(in /usr/local/src/h2o/deps/mruby)
rake aborted!
/usr/local/src/h2o/deps/mruby/lib/mruby/build/load_gems.rb:30:in `load’: /usr/local/src/h2o/deps/mruby/mrbgems/mruby-hash-ext/mrbgem.rake:5: syntax error, unexpected ‘:’, expecting kEND
spec.add_dependency ‘mruby-enum-ext’, core: ‘mruby-enum-ext’
^
/usr/local/src/h2o/deps/mruby/mrbgems/mruby-hash-ext/mrbgem.rake:6: syntax error, unexpected ‘:’, expecting kEND
spec.add_dependency ‘mruby-array-ext’, core: ‘mruby-array-ext’
^
/usr/local/src/h2o/deps/mruby/mrbgems/mruby-hash-ext/mrbgem.rake:7: syntax error, unexpected ‘:’, expecting kEND
…ency ‘mruby-enumerator’, core: ‘mruby-enumerator’
^
./Rakefile:17:in `load’
make[3]: *** [CMakeFiles/mruby] エラー 1
make[2]: *** [CMakeFiles/mruby.dir/all] エラー 2
make[1]: *** [CMakeFiles/h2o.dir/rule] エラー 2
rubyが分からないヘタレなので調査するのも時間がかかってしまうので古いものを探してインストール。
h2o v2.0.1をインストール
wget https://github.com/h2o/h2o/archive/v2.0.1.tar.gz
tar zxvfp v2.0.1.tar.gz
cd h2o-2.0.1/
cmake .
make
make install
サンプルのconfファイルをコピーする。
mkdir /usr/local/etc/h2o/
cp /usr/local/src/h2o-2.0.1/examples/h2o/h2o.conf /usr/local/etc/h2o/h2o.conf
vi /usr/local/etc/h2o/h2o.conf
h2o起動
sudo /usr/local/bin/h2o -m daemon -c /usr/local/etc/h2o/h2o.conf
h2o起動時のエラーでハマった点
failed to parse configuration file:/usr/local/etc/h2o/h2o.conf:line 25:did not find expected key
yaml データとしては invalid な形式になっていまして、以下のように3行目のスペースが1つ足りない。
confファイルのaccess-logの先頭に2個スペースが必要。
access-log: /var/log/h2o/access_log
再度チャレンジ
start_server (pid:4605) starting now…
No support for IPv6. Please update Perl (or Perl modules) at /usr/local/share/h2o/start_server line 8.
現在のstart_serverはIPv4のみをサポートしているので、設定ファイルのhost: 0.0.0.0を追記しておないと、h2oがIPv6もbindしようとするのでエラーになる様です。
修正ファイル:h2o.config
listen:
port: 80
host: 0.0.0.0
これで動いたので、Nginxよりどれくらい早いのかベンチマークしてみたいと思います。
yumでのインストールが出来ない物だと思ってましたが、今はyumでインストールできる様です。
追記します。
個人で契約しているしょぼいスペックのVPSでのベンチマークの結果を追記します。

