概要
今回はNginxをSPDYプロトコル通信に対応させたいと思います。
私が、SPDYを知ったのが日経NETWORKの3月号を読んだときでした。
HTTP1.1の次、HTTP2.0はこのSPDYを基礎として作られるのではないかとのこと
(*あくまで現時点の話です)
そんな面白そうなこといつ試すの?今でしょ!
お断り この記事では導入しただけで、導入テストはしておりません。
申し訳ございません。それはまた別の記事で
SPDYについて
SPDYとは、Googleが開発した、Webページの表示を高速化するためのプロトコルである。
SPDYは、OSI参照モデルにおけるアプリケーション層に位置するプロトコルである。データストリームの多重化、リクエストへの優先順の付与、HTTPヘッダの圧縮などを行うことでレイテンシを削減し、それによってWeb上のコンテンツの送受信にかかる時間の短縮を図るものである。
引用元はIT用語辞典バイナリ
私自身もまだSPDYについてわからない事が多いですが
- 従来の1対1のコネクションではなく1本のコネクションで複数の通信ができる。
- デフォルトでヘッダの圧縮を行う
- クライアントからの応答だけではなくサーバから通信をおこなうサーバーヒント、サーバープッシュ
上記のような機能があります。
SPDYについてはまた別記事にしたいと考えています。
参考にさせていただいたページ
OSS界のちょっと気になる話(7):次世代HTTP 2.0はSPDYの取り組みがベースに – @IT
二年後に誕生するHTTP 2.0はGoogleのSPDYがベース
Chrome for AndroidではWeb通信がGoogleのプロキシサーバを経由する
WEB高速化のための実験段階のプロトコルSPDYとは|シフルIT
導入準備
導入方法については公式のドキュメントが存在します。
Nginxはパッケージからのインストールもできますが、提供されているのは最新版ではなく古いバージョンのものになります。
よって、私はNginxのソースからrpmbuildで最新のrpmを作りインストールしました。
導入前にrpmbuildできる環境を用意しておくことが必要
NginxのSPECファイル準備
[bash]
git clone git://github.com/easel/nginx-centos-rpm.git
cd nginx-centos-rpm
ls
404.html default.conf nginx-auto-cc-gcc.patch nginx.init nginx.logrotate nginx.sysconfig sources virtual.conf
50x.html index.html nginx.conf nginx-logo.png nginx.spec poweredby.png ssl.conf
cp -R . rpmbuild/SOURCES
cp nginx.spec rpmbuild/SPECS
[/bash]
上記の手順でSPECファイルを準備します
導入方法
①ソースファイルのダウンロード、解凍
Nginx公式からソースファイルをSOURCESフォルダにダウンロードします。
今回はNginx Development version 1.3.14を使用しています。
[bash]
cd rpmbuild/SOURCES
wget http://nginx.org/download/nginx-1.3.14.tar.gz
tar zxfv nginx-1.3.14.tar.gz
rm -rf nginx-1.3.14.tar.gz
[/bash]
②パッチを適用
SPDYモジュールは今現在デフォルトの機能として組み込まれていません。
よってパッチを当てます。
[bash]
cd nginx-1.3.14
wget http://nginx.org/patches/spdy/patch.spdy.txt
patch -p1 < patch.txt
rm patch.txt
[/bash]
③Open SSL 1.0.1をダウンロード
SPDYがTLSを使用して通信するので、Open SSL 1.0.1以上が必要になります。
これはシステム側にインストールする必要はありません。*ドキュメント参照
[bash]
wget http://www.openssl.org/source/openssl-1.0.1.tar.gz
tar zxfv openssl-1.0.1.tar.gz
rm -rf openssl-1.0.1.tar.gz
[/bash]
nginx-1.3.14フォルダの中身はこのようになっています↓
[bash]
ls
CHANGES CHANGES.ru LICENSE README auto conf configure contrib html man openssl-1.0.1 src
[/bash]
④フォルダからソースファイルの作成
[bash]
tar cvf nginx-1.3.14.tar.gz nginx-1.3.14
[/bash]
⑤specファイルの編集
設定項目は4つほどあります。
12行目あたりのversionを変更
[bash]
cd rpmbuild/SPECS
vim nginx.spec
version: 1.3.14
[/bash]
./configureの前にexport LANG=’jp_JP.UTF-8’を追加
[bash]
export LANG=’js_JP.UTF-8′
export DESTDIR=%{buildroot}
./configure \
–prefix=
[/bash]
./configure オプションの追加
[bash]
./configure \
–with-http_ssl_module \
–with-http_spdy_module \
–with-openssl=openssl-1.0.1 \
[/bash]
make オプションの変更
make %{?_smp_mflags}をコメントアウトして、ただのmakeを追加
[bash]
#make %{?_smp_mflags}
make
[/bash]
⑥rpmbuildの実行
[bash]
rpmbuild -bb nginx.spec
[/bash]
以上でRPMSフォルダにnginx-1.3.14のrpmファイルが作られます。
インストール
実際にインストールしてみます。
/etc/nginxフォルダのバックアップを取っておきましょう。
[bash]
sudo rpm -Uvh nginx-1.3.14-3.el6.x86_64.rpm
[/bash]
インストールされているか確認
組み込まれているモジュール一覧を表示
[bash]
nginx -V
……
–with-mail_ssl_module –with-http_spdy_module –with-openssl=openssl-1.0.1 –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m64 -mtune=generic’ –with-ld-opt=-Wl,-E
[/bash]
以上で導入完了です。
あとは導入テストですが、これはまた別の記事で書きたいと思います。
ハマったところ
makeオプションをコメントアウトするところでハマりました。
最初コメントアウトせずデフォルトで実行していました。
するとこんなエラーが
[bash]
make[4]: ディレクトリ `rpmbuild/BUILD/nginx-1.3.14/openssl-1.0.1/crypto/cmac’ から出ます
if [ -n "" ]; then \
(cd ..; make libcrypto.so.1.0.0); \
fi
make[3]: ディレクトリ `rpmbuild/BUILD/nginx-1.3.14/openssl-1.0.1/crypto’ から出ます
make[2]: ディレクトリ `rpmbuild/BUILD/nginx-1.3.14/openssl-1.0.1′ から出ます
make[1]: *** [openssl-1.0.1/.openssl/include/openssl/ssl.h] エラー 2
make[1]: ディレクトリ `rpmbuild/BUILD/nginx-1.3.14′ から出ます
make: *** [build] エラー 2
エラー: /var/tmp/rpm-tmp.UzKRCx の不正な終了ステータス (%build)
RPM ビルドエラー:
/var/tmp/rpm-tmp.UzKRCx の不正な終了ステータス (%build)
[/bash]
if [ -n “” ]; then \
(cd ..; make libcrypto.so.1.0.0); \
fi
(・’v`・)?? 全くわかりません
そこで参考にしたのが以下のページです。
Re: nginx build with OpenSSL 1.0.1
ここのページに行き着いても英語が読めないので結構困りました。
英語大切ってことで以上です。