さくらのVPS CentOS6のNginxで簡単にサイトをHTTP/2化しましょう

スポンサーリンク

HTTP/2化

昨今HTTP/2化やHTTPS化が盛んに叫ばれています。
その仕組みは他のサイトを参照してもらうとして、当サイトも1年ほど前にHTTPS化を行いました。

CentOS6で

それに続き、今回はCentOS6でサイトをHTTP/2しようというのが目的です。
できるだけ簡単に実践していきますので、よろしくお願いいたします。

HTTP/2化の波

通信速度が速い・遅い、等いろんな議論が現時点ではあります。
でも確実にHTTP/2化の波が来るのは避けられないでしょう。
実際にGoogleやYahooのページなども既にHTTP/2化されていますし、HTTP/2化されたサイトが最近特に増えてきています。

サーバー環境の整備

その理由としてはサーバー側の環境が整ってきたからです。
OpenSSL1.0.2xと1.0.2x対応Nginx
Ubuntu16.04ではデフォルトでOpenSSLがHTTP/2対応のバージョン1.0.2xですし、CentOS7でもyumでOpenSSLのバージョンを1.0.2xに上げられるようです。

Ubuntu16.04やCentOS7は対応

Nginxはいくら最新でもOpenSSL1.0.2xを使ってビルドされていなくてはHTTP/2通信ができません。
UbuntuやCentOS7にはHTTP/2対応のNginxのパッケージが既にあり手軽にHTTP/2化できるような環境が昨年の秋頃から整備されてきました。

CentOS6ではソースビルドするしかない

では、CentOS6はどうなのか?残念ながら現時点ではOpenSSLもNginxもHTTP/2対応パッケージがありません。ではどうするのか?やはりソースからビルドするしかないのです。
でもこれが難しくないのです。素人の私でもできましたから・・・

1.0.2x対応のNginxだけでいい

それともう1点ですが、HTTP/2に対応するにはどうやらNginxのビルドだけで対応できるということです。ということで今回はNginxのビルドをOpenSSL1.0.2nを使ってやっていきます。

OpenSSL1.0.2n自体のビルドもあとの方で触れたいと思います。

Nginxのビルド

前提

yumでNginxが既にインストールされておりNginxも設定済とします。、
これからは全部root権限で行います。

# mkdir /home/centos6/work
# cd /home/centos6/work
# wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz
# wget https://nginx.org/download/nginx-1.13.9.tar.gz
# tar zxvf openssl-1.0.2n.tar.gz
# tar zxvf nginx-1.13.9.tar.gz
# cd nginx-1.13.9
# ./configure --with-http_ssl_module --with-openssl=/home/centos6/work/openssl-1.0.2n --with-compat --with-file-aio --with-threads --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_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module
# make
# make install

これで/usr/local/nginx/配下にインストールされます。
OpenSSL1.0.2nのソースファイルを取り込むオプション

--with-openssl=/home/centos6/work/openssl-1.0.2n

を忘れないでくださいね。
これでOpenSSL1.0.2対応のNginxがビルドされます。
もし足りないパッケージ等が要求されたらyumでインストールしてください。

上の./configureのオプションは

# nginx -V

を参考にしてください。

# service nginx stop
# /usr/local/nginx/sbin/nginx -V

でバージョンを確認。

ここから原始的ですが、なるべく元々のNginxの設定に触らない方法をご紹介します。

設定を戻す為に元々の設定ファイルへのシンポリックを作成する。

# cd /usr/local/nginx/conf
# mv nginx.conf nginx.conf.bak
# mv nginx.conf.default nginx.conf.default.bak
# ln -s /etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
# ln -s /etc/nginx/conf.d/default.conf /usr/local/nginx/conf/nginx.conf.default
# /usr/local/nginx/sbin/nginx

で起動するのですが、おそらくpidエラーが出ます。
今回のコンパイルではpidファイルの位置は
/usr/local/nginx/logs/nginx.pid
になるからです。

# nano /etc/nginx/nginx.conf

......
error_log  /var/log/nginx/error.log warn;
#pid        /var/run/nginx.pid;
 pid        /usr/local/nginx/logs/nginx.pid;
......

と編集・保存します。
これでやっと起動できます。

# /usr/local/nginx/sbin/nginx
# /usr/local/nginx/sbin/nginx -s stop

で停止

# /usr/local/nginx/sbin/nginx -s reload

でリロードになります。
ここで

# /usr/local/nginx/sbin/nginx -s reload

とすると、今までのサイトが表示されます。

# nano /etc/nginx/conf.d/default.conf
server {

       listen 443 ssl http2;
       ssl_certificate     /etc/let........
......

と編集して保存するとサイトがHTTP/2化されます。
従前のNginxに戻るには

# /usr/local/nginx/sbin/nginx -s stop
# nano /etc/nginx/nginx.conf
......
error_log  /var/log/nginx/error.log warn;
 pid        /var/run/nginx.pid;
#pid        /usr/local/nginx/logs/nginx.pid;

……
と編集。

# service nginx start

でOKです。

私はNginxの起動スクリプトである
/etc/init.d/nginx
を変更したくないので、元々のnginxである
/usr/sbin/nginx
にシンボリックリンクを作成しない、面倒な方法?を選んでます。

OpenSSLのインストール

# cd /home/centos6/work/openssl-1.0.2n
# ./config shared zlib -fPIC
# make
# make install

足りていないパッケージが要求されたら、適宜yumで入れましょう。

私はVPS上ではOpenSSL1.0.2nをとりあえず使ってませんが、使うのであれば

# mv /usr/bin/openssl /usr/bin/openssl.bakup

と退避し、OpenSSL1.0.2へのシンボリックリンクを作成

# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

OpenSSLは起動スクリプトがないのでマシンを再起動させます。

# openssl version

で1.0.2nになっているはずです。

最後に

因みに私は仮想CentOS6ではOpenSSL1.0.2nを上の方法で使っていますが、さくらのVPSでは使っていません。理由はとりあえずNginxだけでHTTP/2化できたからです。
それと、OpenSSLはシステムに深く関与している可能性があり、保留しています。

あとVPSには仮想CentOS6でビルドしたNginxをnginxフォルダーごとtar.gzで固めてWinSCPでアップロードして配置。今のところ問題なくHTTP/2通信できているようです。
お疲れ様でした。

間違いがありましたらすいません。
ご一報くだされば幸いです。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク