H2Oの設定で手こずった点

結合しても証明書のエラーが出る

h2oはnginxのようにcat 証明書 CA証明書 中間CA証明書 > ssl.crtという感じで証明書を結合しなければなりません。ここで結合すると「証明書がなんかおかしいです」といったエラーが起こりSSLが使用できないという事案が起こりました。

とりあえず問題の結合された証明書を見てみると…

-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----

これはダメですわ。ちゃんと改行しましょうね。

-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----

これで正しく使用できるようになりました。

ApacheのようにSystemd(かUpstart)から起動できるようにする

ApacheやNginxではSystemdやUpstartから起動するのですが、h2oでは同じようなことができないようなので、自分でスクリプトを書く必要があります。
大学にある自分のサーバー(VineLinux)はh2oをUpstartを用いてデーモン化しています。
書いたら設定をリロードして使えるようにします。ここらへんを参照してください。

description "H2O Daemon"
author "hotcocoa <cocoa@gochiusa.xyz>"

start on runlevel [2345]
stop on runlevel [016]

chdir /path/to/h2o
exec ./h2o -c h2o.conf
respawn

このように書けばOKかと思います。しかしUpstartはUbuntu 15.04からSystemdによって置換されてしまうのでこの手段は使えません。おそらくUbuntu 16.04 LTSにアップグレードするときに壁にぶつかるのではないでしょうか。
SystemdのUnitの書き方は次のような感じです。このUnitは現在動いている自宅サーバで使用しています。(おそらく間違えているかと思います。詳しい方教えてください)

# /etc/systemd/system/h2o.service
[Unit]
Description=H2O Daemon
After=hhvm.service

[Service]
PIDFile=/run/h2o.pid
ExecStart=/path/to/h2o -c path/to/h2o.conf

[Install]
WantedBy = multi-user.target

systemctl enable h2o.serviceで有効化したらsystemctl start h2o.serviceで使えるようになりますね。
※h2o.confでpidなどを正しく指定しないとこのUnitも動かないです。

サーバの再構築をした

今までWordPressなどが動いている自宅サーバーがとてもとても重いので、一念発起してWebサーバの再構築をしました。

今までの環境(~2015/7)

  • CentOS 6.6 x64(VMware上で稼働)
  • MariaDB
  • PHP 5.6.7
  • Apache 2.4

これからの環境(2015/8~)

  • Ubuntu 14.04 x64(Hyper-V上で稼働)
  • Percona Server
  • HHVM 5.6.99
  • H2O

OSから何まで変わっています。

参考になったサイト

Percona Server

[Ubuntu] aptで、Percona Server(MySQL)を入れる方法
尋常では無いほど詳しく書かれています。

HHVM

Prebuilt packages on Ubuntu 14.04
PHP5よりも速そうなHHVMを使いました。Facebookが作ったと聞くだけですごく速そうです。
service hhvm startと入力したらFastCGIサーバが稼働します。
なお、エイリアスが設定されているのでhhvmコマンド以外にもphpコマンドも使えます。php -vと入れてもバージョン情報が出力されます。

h2oのインストールと設定

H2OでPHP(がちょっとだけ動くまで)

続、PHPとH2OをfastCGIでつなぐ話、暗黒道

新、PHPとH2OをfastCGIでつなぐ話、解決編

うずらさんによるこちらの記事が役に立つのではないでしょうか。

なお、h2oはApacheやnginxのようにUpstart(またはSystemd)から動いてくれないので自分でスクリプトを用意する必要があります。ここに関しては後で書こうと思います。