nginxの公式Dockerイメージってalpine版だけopensslのバージョンが違うのね
こんばんは。このところサイトのSSL化とHTTP/2化を目論んでまして、その絡み(あとゼルダもな!)でサイトの更新が滞りがちな管理人です。
CentOS 7でHTTP2サイトを構築する方法を調査しているうちに、面白い話が出てきたので軽く触れておきます。
結論としては、Docker Hub の nginx 公式リポジトリの alpine版って、OpenSSL のバージョンが違うんやね。という話です。
コンテナ側の OS が違うんだから、そりゃそういうこともあるだろうよ。ってな話にはなるわけですが、OpenSSL は多くのプログラムから使われる共通ライブラリにもなっていることもあり、保守的なOSだとなかなか新バージョンを採用しない。そんな中、軽量で知られる Alpine 版のイメージなら OpenSSL 1.0.2系を載せてるよ。というわけです。
保守のことまで考えれば、今どきソースからビルドして複数バージョンの OpenSSL を共存。とかしたくはないですし、そういうのはコンテナの中でやればいいよね。と。あとは、アップデートのことも考えるなら、できれば公式イメージを使いたい。という話もある。ということで、HTTP/2 の TLS+ALPN 絡みで OpenSSL 1.0.2 が必要になる人には、これって面白い解決策かもしれないなー。と思ったり。
とりあえず、証跡は以下。
<docker.io/nginx:1.11.13>
[root@localhost ~]# docker exec -it nginx-container sh root@localhost:/# apt-cache policy openssl openssl: Installed: 1.0.1t-1+deb8u6 Candidate: 1.0.1t-1+deb8u6 Version table: *** 1.0.1t-1+deb8u6 0 100 /var/lib/dpkg/status root@localhost:/# openssl version OpenSSL 1.0.1t 3 May 2016
<docker.io/nginx:1.11.13-alpine>
# cat /lib/apk/db/installed /libssl C:Q1sBqFOZeqahSuJ+ONljHXTiOfTes= P:libssl1.0 V:1.0.2k-r0 A:x86_64 S:174567 I:442368 T:SSL shared libraries U:http://openssl.org L:openssl o:openssl m:Timo Teras t:1485441534 c:3eb2d51b3b6d1670a7763dddd331789b32fc36ad D:so:libc.musl-x86_64.so.1 so:libcrypto.so.1.0.0 p:so:libssl.so.1.0.0=1.0.0 F:lib R:libssl.so.1.0.0 a:0:0:555 Z:Q1r53eZoOqTL1b1BvZFMi0NCtwMy0= F:usr F:usr/lib R:libssl.so.1.0.0 a:0:0:777 Z:Q1ke5dnHGVWcEyRpOe0/lKEqizHHQ=
MixHost みたいな HTTP/2 対応のレンタルサーバーを使っていれば、割りと簡単に対応できそうな感じでもあるし、なんなら CDN の HTTP/2 機能を使うっていう手もあるにはあるんですけどね。
ただ、最近はかなり重たい WordPress のプラグインも流行っていることだし、なんとなーく、共用サーバで収容率が上がるとパフォーマンス問題が出てきやすくなりそうな予感も…。
ちなみに HTTP/2 にはサーバープッシュの機構も用意されており、WordPress 用の対応プラグインとかまで出ている状態なのですが、そこまでたどり着くのはいつのことやら…。