独自ドメインを独自サーバに移転するに際し、 Web サーバをどれにしようかと考えました。

ゼロから新しく構築するので、当然ながら HTTP/2 前提です。

Apache は以前から使っていたのですが、設定ファイルが複雑で、あまり好きではありませんでした(自由度の高さは認めます)。 nginx は触ったことがないので以前から興味がありました。本も2冊買いました。

そんなある日、HTTP/2 に最適化されているとうたう H2O というサーバの存在を知りました。 DeNA のひとがメインで開発している OSS です。

せっかくの機会なので、試してみることにしました。

ちなみにサーバ環境は Ubuntu 16.04.1 LTS (Xenial Xerus) x86_64 です。

追記:デフォルトで IPv6 にも対応していました。

インストール

ソースコードを git clone してビルドしました。

1
2
3
4
5
6
7
8
9
$ sudo apt-get install -y cmake zlib1g-dev
$ sudo apt-get install -y bison ruby ruby-dev
$ git clone https://github.com/h2o/h2o.git
$ cd h2o
$ git tag
$ git checkout v2.0.4
$ nice -19 cmake -DWITH_BUNDLED_SSL=on -DWITH_MRUBY=on .
$ nice -19 make
$ sudo make install

一発でビルドに成功しました。

なお、RPM なひと(CentOS とか)では ruby-dev の代わりに ruby-devel かも。

とりあえず添付されているサンプルを実行してみる:

1
2
3
4
5
6
7
8
9
動作確認用のポートを開ける
$ sudo ufw allow 5210
$ sudo ufw allow 5211
$ sudo ufw status
自動的に IPv6 のポートも開けてくれる。

h2o.conf のポート番号だけ書き換えて実行
$ vi examples/h2o/h2o.conf
$ h2o -c examples/h2o/h2o.conf

使ったポート番号は適当です。 1024 番未満のポートは特権ポートなので使えません。 port 8080 と port 8081 はポートスキャンがうざいので避けたほうがいいです。

ブラウザで http://hogehoge.example.com:5210 とか https://hogehoge.example.com:5211 とかにアクセスすれば、 “Welcome to H2O” のページが見られるはずです。

バージョンアップ

1
2
3
4
5
6
7
8
9
$ cd h2o
$ make clean
$ git fetch
$ git tag
$ git checkout v2.0.6
$ nice -19 cmake -DWITH_BUNDLED_SSL=on -DWITH_MRUBY=on .
$ nice -19 make clean
$ nice -19 make
$ sudo make install

あとは H2O の master プロセスに kill -HUP するだけ。

設定ファイル

設定ファイルは h2o.conf です。書き方は公式ドキュメント参照。 Apache に比べてはるかにシンプルです。

1
$ vi h2o.conf

編集が終わったら、問題が無いかチェック:

1
$ h2o -t

OK なら H2O の master プロセスに kill -HUP すると再読み込みしてくれる。

ログのローテーションは rotatelogs コマンドで

公式ドキュメントでは error-log や access-log をローテーションさせるのに rotatelogs コマンドを使っています。

rotatelogs コマンドは apache2-utils パッケージに含まれています。

1
$ sudo apt-get install -y apache2-utils

以上。