はじめに
昨日AkamaiさんのHTTP2セミナーに行ってきました。
非常に中身も濃く、色々環境は整ってきているなっていう印象を受けて刺激を貰って帰ってきました。
そこで熱が冷めないうちに弊社でもテスト的な環境を作ってみました。
テスト環境の構築
簡単にサーバを建てられるということで環境はAmazon Linuxを用いています。
列挙すると下記の通りです。
- AmazonLinux 2015.03
- Apache2.4
- mod_h2
テストということもあり、非常に手作業の多い環境構築です:^)
環境構築
前準備
必要とされるパッケージを入れておきます。
$ sudo yum install httpd24-devel httpd24-tools
$ sudo yum groupinstall 'Development Tools'
$ sudo yum install openssl-devel
$ sudo yum install libevent-devel
$ sudo yum install libxml2-devel
$ sudo yum install jemalloc-devel
nghttp2の構築
ここまで準備したあと依存しているnghttp2をまず構築します。
githubからcloneしてきます。
$ git clone https://github.com/tatsuhiro-t/nghttp2.git
Cloning into 'nghttp2'...
remote: Counting objects: 23931, done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 23931 (delta 7), reused 0 (delta 0), pack-reused 23907
Receiving objects: 100% (23931/23931), 20.05 MiB | 3.77 MiB/s, done.
Resolving deltas: 100% (17102/17102), done.
Checking connectivity... done.
$
buildします。
$ autoreconf -i
$ automake
$ autoconf
$ ./configure
configure: summary of build options:Version: 1.0.6-DEV shared 14:5:0
Host type: x86_64-unknown-linux-gnu
Install prefix: /usr/local
C compiler: gcc
CFLAGS: -g -O2
WARNCFLAGS:
LDFLAGS:
LIBS:
CPPFLAGS:
C preprocessor: gcc -E
C++ compiler: g++
CXXFLAGS: -g -O2 -std=c++11
CXXCPP: g++ -E
Library types: Shared=yes, Static=yes
Python:
Python: /usr/bin/python
PYTHON_VERSION: 2.7
pyexecdir: ${exec_prefix}/lib64/python2.7/dist-packages
Python-dev: yes
PYTHON_CPPFLAGS:-I/usr/include/python2.7
PYTHON_LDFLAGS: -L/usr/lib64 -lpython2.7
Cython:
Test:
CUnit: no
Failmalloc: yes
Libs:
OpenSSL: yes
Libxml2: yes
Libev: no
Libevent(SSL): yes
Spdylay: no
Jansson: no
Jemalloc: yes
Zlib: yes
Boost CPPFLAGS:
Boost LDFLAGS:
Boost::ASIO:
Boost::System:
Boost::Thread:
Features:
Applications: no
HPACK tools: no
Libnghttp2_asio:no
Examples: yes
Python bindings:no
Threading: yes
Third-party: yes$ make
$ make install
少しサマリにnoが多いですが動作させるだけのテストなのでこのままインストールしました。
インストール先の/usr/local/lib/はライブラリのサーチパスに含まれていませんのでここで追加しておきます。
$ pwd
/etc/ld.so.conf.d
$ cat local.conf
/usr/local/lib/
$ sudo ldconfig
$ sudo ldconfig -p| grep libnghttp2
libnghttp2.so.14 (libc6,x86-64) => /usr/local/lib/libnghttp2.so.14
libnghttp2.so (libc6,x86-64) => /usr/local/lib/libnghttp2.so
無事に認識されていますので、安心して:)次の工程へ進めます。
mod_sslのインストール
mod_sslはNPN対応版が
必要になりますのでビルドします。
こちらで公開されているものを利用しました。
https://github.com/eousphoros/mod-spdy
依存しているライブラリを導入します。
$ sudo yum install pcre-devel pcre-tools
cloneしてビルドします。
$ git clone https://github.com/eousphoros/mod-spdy.git
Cloning into 'mod-spdy'...
remote: Counting objects: 5791, done.
remote: Total 5791 (delta 0), reused 0 (delta 0), pack-reused 5791
Receiving objects: 100% (5791/5791), 8.50 MiB | 2.52 MiB/s, done.
Resolving deltas: 100% (1529/1529), done.
Checking connectivity... done.
$ cd mod-spdy/src
$ ./build_modssl_with_npn.sh
Not a directory: /home/ec2-user/mod-spdy/src/mod_ssl
Attempting to create: /home/ec2-user/mod-spdy/src/mod_ssl
Using buildroot: /home/ec2-user/mod-spdy/src/mod_ssl
バイナリの依存を簡単にみておきます。
$ ldd /home/ec2-user/mod-spdy/src/mod_ssl.so
linux-vdso.so.1 => (0x00007ffe551bf000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f555a47b000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f555a277000)
libc.so.6 => /lib64/libc.so.6 (0x00007f5559eb6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f555ab45000)
$
特に特殊な依存なしで動きそうですね。
Apacheのモジュールとしてインストールします。
$ sudo cp /home/ec2-user/mod-spdy/src/mod_ssl.so /etc/httpd/modules/mod_ssl.so
mod_h2
やっとmod_h2のインストールです。
$ git clone https://github.com/icing/mod_h2.git
Cloning into 'mod_h2'...
remote: Counting objects: 4316, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 4316 (delta 1), reused 0 (delta 0), pack-reused 4307
Receiving objects: 100% (4316/4316), 5.28 MiB | 1.57 MiB/s, done.
Resolving deltas: 100% (3248/3248), done.
Checking connectivity... done.
$
$ autoreconf -i
$ automake
$ autoconf
$ ./configure
$ make
$ sudo make install
以上で/etc/httpd/conf.d/にh2.confも設置されますので通常通りSSL対応サーバとしての設定を行っておきます。
$ cat h2.conf
H2Engine on
コンフィグのテストを行ったら起動しておきましょう
$ sudo /etc/init.d/httpd start
Starting httpd: [ OK ]
なお、mod_sslをNPN未対応版を使うとこのような形でエラーログが吐かれmod_h2は動作しません
[Tue Jul ** 02:21:22.625103 2015] [h2:warn] [pid 7155] mod_ssl does not offer ALPN or NPN registration
テスト
やっと接続テストです。
接続
ブラウザはFirefox Developer Editionを用いました。about:configで設定をみるとHTTP2は有効になっているようです。
アクセスしてみるとこんな感じですね。
ちゃんとVersion2.0で接続されている事が確認できました。
WordPressでありがちな画像多めの投稿の場合
アクセスしただけだとあまりにつまらないのでWordpressを動かして画像の投稿を実施してみました。
恣意的かもしれませんが、画像多めでの投稿の場合で確認しています。
テスト用コンテンツ
まずは無効状態(HTTP/1.1)での場合
続いて有効化(HTTP2)した場合
これくらいのコンテンツでも想定通り茶色の待ってる時間が減っていて、パラレルにコンテンツが受け取れているようですね。
OSの標準パッケージでより簡単に利用できると夢も広がりそうですね。
投稿者プロフィール
-
インフラ系のエンジニアです。
運用系のスクリプトを書いたり、オートメーションな世界に向かって日々精進しています。
最新の投稿
- Apache2016年6月24日ApacheWebServerで圧縮転送の設定
- AWS2016年5月17日SkyHopperのインストーラで作成するChef Serverについてのご注意
- AWS2016年3月29日SkyHopper v1.15.2の評価用AMI公開しました
- AWS2016年3月8日SkyHopperのプロダクトページを作成しました