Apache Traffic Server で HTTP/2 を有効にする方法

# はじめに

この記事は Apache Traffic Server (以下 ATS) で Hypertext Transfer Protocol Version 2 (以下 HTTP/2) を有効にする **最低限** の設定方法をまとめたものです。

# Step 0: いつくかの前提

- OpenSSL 1.0.1系 もしくは 1.0.2系
- ATS v6.0.0
  - ATS は `HTTP/2 over TLS` のみをサポートしているので、HTTP/2 を有効にするには SSL/TLS の設定が必要です。
  - `/usr/local/` 下にインストールしてあるとします。
  - ATS のビルドとインストールについては [Getting Started — Apache Traffic Server documentation](https://docs.trafficserver.apache.org/en/latest/getting-started.en.html#installation) を参照してください。
  - デフォルトでは `records.config` などの設定ファイルは `/usr/local/etc/trafficserver/` 下にあります。

# Step 1: SSL/TLS の設定

## ポートの設定

仮に `4443` ポートで HTTP/2 を受けたいとします。[`records.config`](http://trafficserver.readthedocs.org/en/latest/reference/configuration/records.config.en.html) の [`proxy.config.http.server_ports`](http://trafficserver.readthedocs.org/en/latest/reference/configuration/records.config.en.html#proxy-config-http-server-ports) の設定に `4443:ssl` を追加します。

```:records.config
CONFIG proxy.config.http.server_ports STRING 8080 4443:ssl
```

## 証明書の設定

仮にサーバー証明書(`example.pem`)と秘密鍵(`example.key`)を `/usr/local/etc/trafficserver` 下に置いているとします。
`ssl_multicert.config` に次の設定を追加します。

```:ssl_multicert.config
ip_dest=* ssl_cert_name=example.pem ssl_key_name=example.key
```

- 注1: `ssl_cert_name=`, `ssl_key_name=` の設定値が相対パスの場合、`records.config` の `proxy.config.ssl.server.cert.path` の設定値からの相対パスになります。デフォルトでは `/usr/local/etc/trafficserver` です。
- 注2: 証明書/秘密鍵を root からのみ読めるようにしている場合 `records.config` の [`proxy.config.ssl.cert.load_elevated`](http://trafficserver.readthedocs.org/en/latest/reference/configuration/records.config.en.html#proxy-config-ssl-cert-load-elevated) の設定を `1` に変更する必要があります。

# Step 2: HTTP/2 の設定

[`records.config`](http://trafficserver.readthedocs.org/en/latest/reference/configuration/records.config.en.html) の [`proxy.config.http2.enabled`](http://trafficserver.readthedocs.org/en/latest/reference/configuration/records.config.en.html#proxy-config-http2-enabled) の設定を `0` から `1` に変更します。 

```:records.config
CONFIG proxy.config.http2.enabled INT 1
```

# Step 3: 起動

ATS を起動して 4443 ポートにアクセスしてみてください。

```
$ trafficserver start
```

設定を書き換えた場合、ATS の再起動もしくは設定のリロードを行ってください。

```
$ trafficserver restart
or
$ traffic_ctl config reload
```

- 注3: 設定項目によってはリロードでは反映されず、再起動が必要なものもあります。

# See Also
- SSL/TLS 関連のその他の設定
  - [Using SSL Termination](http://trafficserver.readthedocs.org/en/latest/admin/security-options.en.html#using-ssl-termination)
  - [records.config - SSL Termination](http://trafficserver.readthedocs.org/en/latest/reference/configuration/records.config.en.html#ssl-termination)
  - [ssl_multicert.config](http://trafficserver.readthedocs.org/en/latest/reference/configuration/ssl_multicert.config.en.html)

- HTTP/2 関連のその他の設定
  - [records.config - HTTP/2 Configuration](http://trafficserver.readthedocs.org/en/latest/reference/configuration/records.config.en.html#http-2-configuration)
- ATS 自体のドキュメント
  - [Apache Traffic Server documentation](https://docs.trafficserver.apache.org/en/latest/index.html)
  - [Apache Traffic Server](http://trafficserver.apache.org/)
- ATS 6.0.0 リリースアナウンス
  - [Traffic Server 6.0 released](https://blogs.apache.org/trafficserver/entry/traffic_server_6_0_released)
  - [What's New in v6.0.x](https://cwiki.apache.org/confluence/display/TS/What%27s+New+in+v6.0.x)