HTTP/2.0サーバ(nghttp2)の構築 Ubuntu
利用するのはnghttp2と呼ばれる日本人のtatsuhiro-tさんによって開発されたサーバソフト
必要パッケージのインストール
nghttp2の依存パッケージやgit、gcc4.9環境をインストール。(OSはubuntu前提)
sudo apt-get update
sudo apt-get install make binutils autoconf automake autotools-dev libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev libjemalloc-dev cython python3.4-dev
sudo apt-get update
sudo apt-get install git
sudo apt-get install -y python-software-properties
sudo apt-get update
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -y gcc-4.9 g++-4.7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
sudo update-alternatives --list gcc
nghttp2のビルド
GitHubからnghttp2のソース一式をダウンロードし、ビルド
git clone https://github.com/tatsuhiro-t/nghttp2.git
sudo apt-get update
cd nghttp2
autoreconf -i
automake
autoconf
./configure
make
cd src
makeで数分待つ
ここまで実行すると、srcディレクトリ内にnghttpdが作成される
### サーバ証明書、秘密鍵の生成
nghttp2では、httpsだけでなくhttpもサポートしているのですが、現時点でhttp/2に対応しているブラウザ(※1)はhttpsのみを前
提にしているので、SSL環境の構築が必要
openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
openssl rsa -passin pass:x -in server.pass.key -out server.key
rm server.pass.key
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
秘密鍵、サーバ証明書を作成しています
環境構築後のアクセス時にエラーを出さないようにするためにはブラウザに証明書をインポートしてください
※1 2015/3/8時点での対応ブラウザ:Firefox最新版、Chrome最新版(chrome://flags/でSPDY/4オプションのONが必要)
コンテンツ作成、nghttpd起動
Webページを作成し、nghttpdを起動
vi index.html
viでindex.htmlを編集
<html>
<body>Hello, World!</body>
</html>
nghttp2は、nghttpdが置いてあるディレクトリと同じディレクトリを公開します
viの操作方法は省略しますが、「Hello, World!」のみが表示されるWebページを作成しています
PATH=$PATH:/home/○○(GCEインスタンスのユーザ名)/nghttp2/src
export PATH
nghttpd -v 8080 server.key server.crt
パスを通し、8080ポートでの起動と先ほど作成した秘密鍵、証明書を指定し、-vオプションをつけて起動します
-vオプションはHTTP/2フレームのやり取りを表示するためのオプションです
対応ブラウザからアクセス
対応ブラウザから、以下のアドレスにアクセスし、「Hello, World!」が表示されたらOK
https://[サーバIPアドレス or サーバURL]:8080/index.html
参考文献:ゼロからはじめるHTTP/2サーバ(nghttp2)環境構築