h2o試してみました、もしくはとりあえずサクッと既存のサイトをHTTP/2化する方法
先日、HTTP/2が正式な仕様として承認されると同時に、その実装であるH2Oのv1.0.0もリリースされました。
HTTP/2の情報はちょいちょいウォッチはしていたのですが、今までHTTP/2なサーバーを動かしたことはなく、いい機会なので自分のサイトをH2Oを使ってHTTP/2対応してみました。
大したことはやってないのですが、Apacheでサービスしており、認証やアクセス制限、ごにょごにょ黒魔術、CGI(!)やSSI(!!)なども動いているので、ApacheをH2Oにリプレースするのは無理でした。
そこで、H2Oをリバプーとして前段に置き、Apacheを後段に置く構成にしました。
設定ファイルはこんな感じです。
# -*- mode: yaml; -*- user: www-data max-connections: 1024 num-threads: 4 listen: host: 10.6.25.29 port: 80 listen: host: 10.6.25.29 port: 443 ssl: certificate-file: /usr/irori/etc/ssl/cert_web/irori.org-cert.pem key-file: /usr/irori/etc/ssl/priv_web/irori.org-priv.pem cipher-suite: AES128-SHA:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:HIGH:MEDIUM:!aNULL:!MD5:!RC4 hosts: "*": access-log: /dev/stdout paths: /: proxy.reverse.url: http://10.6.25.29:9080 proxy.preserve-host: ON
"www.irori.org"のグローバルIPアドレスの80と443宛てのはルーターで10.6.25.29にNATされるので、それをlistenします。
443の方は、SSLの設定をします。
証明書は StartSSL で無料で発行したもらったものです。
certificate-file には発行されたサーバー証明書を指定しますが、中間CAの証明書も必要な場合は、cat でくっつけたファイルを指定します。
くっつける際には、くっつける順序に注意してください。最初にサーバー証明書、つづいて中間CA証明書やクロスルート証明書という風に、信頼チェーンの順序にしましょう。
今回はまるっとApacheに投げたいので、hostsは1つだけです。
H2Oは、リクエストのHostヘッダに合致するものがなければ最初の項目の設定に従うので、便宜的に「"*"」として、そこでぜんぶひっかけてApacheに丸投げしています。
以上、HTTP/0.9ってのもあったよね〜〜と感慨にふけっている老害がお送りしました。