以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

rita-chのnginxをALPN対応仕様にしました

f:id:abyssluke:20170507164129p:plain:w200:left先日、rita-ch.comPHPのバージョンを7.0系に入れ換えましたが、本日朝、nginxをALPN対応(OpenSSL 1.0.2k使用)にした独自ビルドの物に入れ換えました。これによりChromeではHTTP/2でアクセスできるようになったはずです(記事画像はHTTP/2 Testでチェックした結果の画面)。同時にセキュリティ強化の一貫としてTLS1.0/1.1のサポートを切るなどしたのでIE10以前やAndroid 4.3以前のクライアントなどからはSSLでアクセスできなくなったと思います。様子を見てSSLオンリーにするかもしれません(HSTS)。なお、さくらのVPS側のnginx/PHPの更新については現在の所未定です。以下、ビルドメモ。

メモ

nginxのビルドからインストールまで。
ALPNに対応するOpenSSL 1.0.2系の最新版を利用し、zlibも最新版を利用する(nginxのビルドと同時にOpenSSL/zlibもビルドされるのでソースだけでOK)。
以下はUbuntu 14.04(Upstart)の場合で、必要なライブラリがsudo apt-get build-dep nginxなどでインストール済みであるものとする。

$ wget https://nginx.org/download/nginx-1.12.0.tar.gz
$ wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar xzvf nginx-1.12.0.tar.gz
$ tar xzvf openssl-1.0.2k.tar.gz
$ tar xzvf zlib-1.2.11.tar.gz
$ cd nginx-1.12.0
$ ./configure \
  --prefix=/usr/share/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --http-log-path=/var/log/nginx/access.log \
  --error-log-path=/var/log/nginx/error.log \
  --lock-path=/var/lock/nginx.lock \
  --pid-path=/run/nginx.pid \
  --modules-path=/usr/lib/nginx/modules \
  --http-client-body-temp-path=/var/lib/nginx/body \
  --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
  --http-proxy-temp-path=/var/lib/nginx/proxy \
  --http-scgi-temp-path=/var/lib/nginx/scgi \
  --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
  --with-debug \
  --with-pcre-jit \
  --with-http_ssl_module \
  --with-http_stub_status_module \
  --with-http_realip_module \
  --with-http_auth_request_module \
  --with-http_v2_module \
  --with-http_slice_module \
  --with-threads \
  --with-http_addition_module \
  --with-http_geoip_module=dynamic \
  --with-http_gunzip_module \
  --with-http_gzip_static_module \
  --with-http_image_filter_module=dynamic \
  --with-http_sub_module \
  --with-http_xslt_module=dynamic \
  --with-stream=dynamic \
  --with-stream_ssl_module \
  --with-openssl=../openssl-1.0.2k \
  --with-zlib=../zlib-1.2.11
$ make
$ sudo cp -R /etc/nginx /etc/nginx.backup
$ sudo cp /etc/init/nginx.conf /etc/init/nginx.conf.backup #←不要だったかも
$ sudo cp /etc/logrotate.d/nginx /etc/nginx.backup/nginx-logrotate #←不要だったかも
$ sudo apt-get remove nginx libnginx-* nginx-common nginx-full
$ sudo make install
$ sudo ln -s /usr/share/nginx/sbin/nginx /usr/sbin/nginx
$ sudo mv /etc/nginx /etc/nginx.orig
$ sudo mv /etc/nginx.backup /etc/nginx
$ sudo nginx -t #←起動前に設定ファイル確認
$ sudo service nginx start #sudo start nginxでもOK
nginxの暗号化絡みの設定

ssl_protocolsとssl_ciphersだけ変更。この設定は/etc/nginx/nginx.confに書いてある(いわゆるグローバル設定)。

ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!ADH:!aNULL:!MD5;

ついでにdhparamを2048bitから4096bitにしておいた。相当な時間がかかる(家のUbuntu機でも1時間以上掛かった)のでscreenを使って裏で回すべし。

$ sudo openssl dhparam 4096 -out /etc/nginx/ssl/dhparam.pem