h2o で https/2 のデプロイと設定
Intro
土台がだいたいできたので、このサイトを h2o にデプロイした話。
h2o
以前は nginx を使っていたけど、年末に旧ブログの方に書いた Cache-Aware Server Push を試したかったから。
HTTP/2 Push を Service Worker + Cache Aware Server Push で効率化したい話
これは現在 httpbis にドラフトとして上がっており、議論が進んでいる。
まだ Cookie での実装は残っているので、このサイトで対応して行きたい。
証明書
実は .jxck.io に対するワイルドカード証明書を買っている。
したがって、Let's Encrypt は使ってない。
これは Podcast のドメインのほうでやっていこうと思っている。
ドメイン
今までは jxck.io だけで使っていたけど、これを複数ドメインにわけて運用する。
ワイルドカードがあり、同一 IP でデプロイされていると、http2 でコネクションを束ねられる。
SSL LAB
TLS の設定を SSL LABS で調べて A+ を取るのがトレンドみたいになっている。このサイトの結果は A になっている。
これは、せっかくなので TLS1.2 以下を切ったり、暗号スイート を強めに制限したりしているため、古い Android への対応できてないからである。
積極的に切って行くスタイル。
静的ファイルへのマッピング
h2o の設定でちょっとハマったのがパスとファイルの紐付けができないところ。
例えば、favicon.ico
だとか robots.txt
は、特定の URL に対して特定のファイルを割り当てる。
これがこう書けると嬉しい。
paths:
"/favicon.ico":
file.dir: /some/path/to/favicon.ico
"/":
file.dir: /path/to/doc-root
しかし、実際は paths へはディレクトリしか紐づけられない。
やるなら mruby.handler を使うしかない。
(399 は、fallthrough の独自ルールになっているらしい)
"/":
mruby.handler: |
Proc.new do |env|
if env["PATH_INFO"] == "/favicon.ico"
[200, {"content-type" => "image/x-icon"}, File::open("/path/to/favicon.ico")]
else
[399, {}, []]
end
end
file.dir: /path/to/dir
しかしこれを毎回書くのはちょっと面倒。
kazuho さんとは、ファイルを割り当てられるようにするか、もはや h2o.conf を自動生成するか、ruby で書けるようにしたらいいか、みたいな話をした。
HSTS
http -> https へのリダイレクトは入れているが、HSTS ヘッダはまだ吐いてない。
これ吐いてしまうと、ブラウザに忘れさせない限り http では繋がらなくなり、デバッグがちょっと面倒になる場合がある。
一通り開発が落ち着いたら吐く。
Outro
細かい設定が固まったらまた書く。