だからどうしたって話ではありますが、 img.stat.ink
というホストのサーバが H2O になりました。変更前は Nginx でした。一度試してみたかったんですよね、H2O。
H2Oのコンパイル
CentOS 7 用の H2O の RPM が見当たらなかったので、tatsushid/h2o-rpm の成果物を使って RPM パッケージを作成しました。
Docker上でビルドするスクリプトなので、Dockerをインストールしておいて、
# git clone https://github.com/tatsushid/h2o-rpm.git
# cd h2o-rpm
# make centos7
こんな感じ。まったく簡単だ。
H2Oのインストール
構築されたRPMは centos7.build/RPMS/x86_64
あたりに吐かれているので、これを yum install
。
# yum install centos7.build/RPMS/x86_64/h2o-1.6.2-1.el7.x86_64.rpm
せっかくなのでインストールされたファイルの一覧を表示してみる。
# rpm -ql h2o
/etc/h2o
/etc/h2o/h2o.conf
/etc/logrotate.d/h2o
/run/h2o
/usr/bin/h2o
/usr/lib/systemd/system/h2o.service
/usr/share/doc
/usr/share/doc/h2o
/usr/share/doc/h2o/assets
/usr/share/doc/h2o/assets/8mbps100msec-nginx195-h2o150.png
/usr/share/doc/h2o/assets/firstpaintbench.png
/usr/share/doc/h2o/assets/remotebench.png
/usr/share/doc/h2o/assets/searchstyle.css
/usr/share/doc/h2o/assets/style.css
/usr/share/doc/h2o/benchmarks.html
/usr/share/doc/h2o/configure
/usr/share/doc/h2o/configure.html
/usr/share/doc/h2o/configure/access_log_directives.html
/usr/share/doc/h2o/configure/base_directives.html
/usr/share/doc/h2o/configure/command_options.html
/usr/share/doc/h2o/configure/errordoc_directives.html
/usr/share/doc/h2o/configure/expires_directives.html
/usr/share/doc/h2o/configure/fastcgi_directives.html
/usr/share/doc/h2o/configure/file_directives.html
/usr/share/doc/h2o/configure/gzip_directives.html
/usr/share/doc/h2o/configure/headers_directives.html
/usr/share/doc/h2o/configure/http1_directives.html
/usr/share/doc/h2o/configure/http2_directives.html
/usr/share/doc/h2o/configure/mruby_directives.html
/usr/share/doc/h2o/configure/proxy_directives.html
/usr/share/doc/h2o/configure/quick_start.html
/usr/share/doc/h2o/configure/redirect_directives.html
/usr/share/doc/h2o/configure/reproxy_directives.html
/usr/share/doc/h2o/configure/syntax_and_structure.html
/usr/share/doc/h2o/faq.html
/usr/share/doc/h2o/index.html
/usr/share/doc/h2o/install.html
/usr/share/doc/h2o/search
/usr/share/doc/h2o/search/jquery-1.9.1.min.js
/usr/share/doc/h2o/search/oktavia-english-search.js
/usr/share/doc/h2o/search/oktavia-jquery-ui.js
/usr/share/doc/h2o/search/searchindex.js
/usr/share/h2o/annotate-backtrace-symbols
/usr/share/h2o/fetch-ocsp-response
/usr/share/h2o/kill-on-close
/usr/share/h2o/setuidgid
/usr/share/h2o/start_server
/var/log/h2o
/var/www
/var/www/html
/var/www/html/index.html
なんか /etc/h2o/h2o.conf
をいじって systemctl
で動かせばどうにかなりそうな雰囲気ですね。
H2Oの設定
サイトとかを見ながらこんな感じに。
user: nobody
access-log: /var/log/h2o/access.log
error-log: /var/log/h2o/error.log
pid-file: /var/run/h2o/h2o.pid
hosts:
"img.stat.ink:443":
listen:
port: 443
ssl:
certificate-file: "/etc/letsencrypt/live/img.stat.ink/fullchain.pem"
key-file: "/etc/letsencrypt/live/img.stat.ink/privkey.pem"
minimum-version: TLSv1
cipher-suite: "AESGCM:HIGH:!3DES:!RSA:!aNULL:!eNULL:!MD5"
cipher-preference: server
paths:
"/":
file.dir: /home/statink/images
header.add: "X-XSS-Protection: 1;mode=block"
header.add: "X-Content-Type-Options: nosniff"
header.add: "X-Frame-Options: DENY"
header.add: "X-UA-Compatible: IE=Edge"
header.add: "Strict-Transport-Security: max-age=31536000"
header.add: "Cache-Control: no-transform"
expires: 7 day
"/.well-known/":
file.dir: /home/statink/letsencrypt/.well-known/
"img.stat.ink:80":
listen: 80
paths:
"/":
redirect: https://img.stat.ink/
"/.well-known/":
file.dir: /home/statink/letsencrypt/.well-known/
http2-reprioritize-blocking-assets: ON
/.well-known/
は Let’s Encrypt でごにょごにょやるための設定なので要らないひとは要らないはず(うちは大体Public Beta開始時の記事のとおりの設定なのでこうやると更新とか楽ちん)。
要る人は適当に合わせないと悲しいはず。
起動
とりあえず
# h2o -t -c /etc/h2o/h2o.conf
とかして設定の確認をして、
# systemctl enable h2o
# systemctl start h2o
とかお約束なことをやって、動作確認をしておしまい。
確認
あとはいつも通り SSL Labs で TLS の設定を確認して A+ もらって完了。