はじめに
こんにちは。kenjiです。
先日CentOS7.3をインストールしたので、その上でHTTP/2が動作する環境を作っていきます
HTTP/2とはなんぞや、という方はwikipediaのこちらのリンク先へ、どうぞ
過去にも弊社blogでもHTTP/2を扱ったのですが、
GoogeChrome 51以降ではNPNなHTTP/2は利用できなくなりました。そのためALPN対応の方法を記載します。
概要
nginxのrpm作成とインストール
実行環境
CentOS 7.3
インストール方法
yumリポジトリからnginxをインストールすることもできますが、
CentOSのopensslの標準バージョンが1.0.1系となっており、HTTP/2では1.0.2が必要となります。
そのためopenssl1.0.2をincludeしたrpmをrpmbuildから作成します。
執筆時のそれぞれの最新安定バージョンは
nginx-1.10.2
openssl-1.0.2j
となります。
本記事を参考にする場合、脆弱性の観点もありますので最新のバージョンを利用するようにお願いします
環境準備
rpmbuildにあたり、rpmbuildの推奨設定である専用ユーザを作成します。
(既に作成済みの場合本手順は不要です)
1 2 3 |
useradd rpmbuilder su - rpmbuilder echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros |
ソース用意
nginxのsrcパッケージとopenssl1.0.2を用意します
1 2 3 4 5 |
wget http://nginx.org/packages/centos/7/SRPMS/nginx-1.10.2-1.el7.ngx.src.rpm wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz rpm -ivh nginx-1.10.2-1.el7.ngx.src.rpm tar zxvf openssl-1.0.2j.tar.gz |
spec修正
次にspecファイルを更新します。
ソースインストールですとconfigureの更新に相当する作業になります
今回は将来的に利用する可能性のある、
geoip_module
も追加で入れます。
こちらのモジュールはアクセス元のユーザの地域を(おおざっぱですが)ログに記録することができるものになります
GeoIPのリストはCentOS7.3標準で提供されているものを利用します。
また上の方でも書いていますが、openssl1.0.2を内包してビルドします。
変更前後のdiff -uを記載します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
diff -u ~/nginx.spec ~/rpmbuild/SPECS/nginx.spec --- /home/rpmbuilder/nginx.spec 2016-12-14 22:46:41.131426934 +0900 +++ /home/rpmbuilder/rpmbuild/SPECS/nginx.spec 2016-12-14 22:52:12.007201290 +0900 @@ -31,9 +31,9 @@ Epoch: %{epoch} Requires(pre): shadow-utils Requires: systemd -Requires: openssl >= 1.0.1 +#Requires: openssl >= 1.0.1 BuildRequires: systemd -BuildRequires: openssl-devel >= 1.0.1 +#BuildRequires: openssl-devel >= 1.0.1 %endif %if 0%{?suse_version} == 1315 @@ -54,7 +54,7 @@ %define WITH_CC_OPT $(echo %{optflags} $(pcre-config --cflags)) -%define BASE_CONFIGURE_ARGS $(echo "--prefix=%{_sysconfdir}/nginx --sbin-path=%{_sbindir}/nginx --modules-path=%{_libdir}/nginx/modules --conf-path=%{_sysconfdir}/nginx/nginx.conf --error-log-path=%{_localstatedir}/log/nginx/error.log --http-log-path=%{_localstatedir}/log/nginx/access.log --pid-path=%{_localstatedir}/run/nginx.pid --lock-path=%{_localstatedir}/run/nginx.lock --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp --user=%{nginx_user} --group=%{nginx_group} --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module") +%define BASE_CONFIGURE_ARGS $(echo "--prefix=%{_sysconfdir}/nginx --sbin-path=%{_sbindir}/nginx --modules-path=%{_libdir}/nginx/modules --conf-path=%{_sysconfdir}/nginx/nginx.conf --error-log-path=%{_localstatedir}/log/nginx/error.log --http-log-path=%{_localstatedir}/log/nginx/access.log --pid-path=%{_localstatedir}/run/nginx.pid --lock-path=%{_localstatedir}/run/nginx.lock --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp --user=%{nginx_user} --group=%{nginx_group} --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-openssl=/home/rpmbuilder/openssl-1.0.2j --with-http_geoip_module") Summary: High performance web server Name: nginx |
rpmbuild
rpmbuildします
1 |
rpmbuild -bb rpmbuild/SPECS/nginx.spec |
モジュールが不足する場合はyumなどで補ってください
1 |
yum install zlib-devel pcre-devel GeoIP-devel |
yumにてインストール
問題がなければ
/home/rpmbuilder/rpmbuild/RPMS/x86_64/nginx-1.10.2-1.el7.centos.ngx.x86_64.rpm
にrpmができます
以下root権限にて実施
1 |
yum install /home/rpmbuilder/rpmbuild/RPMS/x86_64/nginx-1.10.2-1.el7.centos.ngx.x86_64.rpm |
rpmではなくyumにてインストールする理由は
・依存モジュールの追加インストールが簡単
・削除する際にyum removeで簡単に削除
動作確認
nginx OpenSSL1.0.2同梱版がインストールできました
1 2 3 4 5 6 7 |
# nginx -V nginx version: nginx/1.10.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) built with OpenSSL 1.0.2j 26 Sep 2016 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-openssl=/home/rpmbuilder/openssl-1.0.2j --with-http_geoip_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' |
まとめ
HTTP/2のほうが将来的にSEO有利になると思われますし、
画像が多いECサイトやblogなどではHTTP/2を有効にすることで並列転送が可能となりコンテンツの表示速度が早くなります。
ページの表示速度を気にされる場合は是非検討を
次回は本環境でphp-fpmを設定してみます
投稿者プロフィール
-
2013年入社の平成生まれです。
初めて触ったコンピュータはPC9821でダイヤルアップでした。
その時に鯖落ちや人大杉の対応をしてくださる鯖缶になりたいと憧れ、
みなさんのお役に立てればと思っております!
#今では個人所有のパソコン・サーバだけで20台ほどあります…。
サーバー大好き!