apacheでhttp2対応

なにやらセキュリティ対応とかでapache httpdが2.4.26へ更新。READMEを読んでいるとhttp2がexperimentalではなくて本格対応ですよー、なんてことが書いてありました。それじゃあってことでhttp2を喋ってもらおうじゃねえの。
実は、2015年10月26日のエントリでチャレンジはしているので、インストール手順なんかはそちら。でも実際にやってみると全然http2でお話してくれない。

なんでだ

なんでだといろいろ調べること2日ほど。どうもOpenSSLのALPN対応ができていないからだとわかる。RHEL7のyumで取ってくるOpenSSLは1.0.1eで、ALPN対応は1.0.2から。なのでopensslの最新をソースからビルドしてapacheをmakeする。

OpenSSLをビルド

ソースをダウンロードして展開。configしてmake。この記事を書いた時点での最新は1.1.0fです。

$ tar -zxvf openssl-1.1.0f.tar.gz
$ cd openssl-1.1.0f
$ ./config shared zlib
$ make
# make install

Apacheを再configure

上記でインストールしたOpenSSLは/usr/localへ入ってくるのでそちらを参照するようにしてApacheを再configureする。

$ export CFLAGS=-I/usr/local/include
$ export LDFLAGS=-L/usr/local/lib64
$ ./configure --enable-ssl=shared --with-ssl=/usr/local/ssl (後略)
$ make
# make install

ライブラリを参照できるようにする

/usr/local/lib64以下に入っているOpenSSLのライブラリを参照できるように。
/etc/ld.so.conf.d へ 適当なファイルを作成して、そこに以下一行。

/usr/local/lib64

さらにldconfigを叩く。

# ldconfig

apacheを再起動

# /usr/local/apache

これでようやくhttp2で通信してくれました。/server-statusで参照するとちゃんとプロトコルがh2ってでてきます。早くなったかどうかは、、よくわからない。h2load(昨日入れたやつ)でhttp/1.1を指定して速度比較してもそれほど変わらなかったりする。