質問: HTTP/2 対応サーバを以前立ち上げていたのですが、ブラウザ側の対応が HTTP/2 TLS+ALPN(間違えてました^^;修正前:over TLS) の方向で推移したため、一旦諦めた過去があります。 諦めた当時、HTTP/2 TLS+ALPN(修正前:over TLS) に対応していくにはコンパイルが必須の状態で、コンパイルは経験したことがなかったため、断念しました。 現在の状況も変わっていないと思いますが、再チャレンジしてみたいと考えています。 ・導入するにはまだWebサーバのコンパイルが必須でしょうか? (yumで導入は出来ないですよね?) ・一般的にどのようにアップデートしていくのでしょうか? 導入しようとしている環境は、EC2上に AmazonLinux + nginx を考えています。 コンパイルにすごく時間がかかるといった記事と、運用時のアップデート方法に不安があるため、すでに経験されている方がいればと思い質問してます。 よろしくお願いいたします。
回答: 新しめの仕様を使いたければ、ソースからコンパイルするのが当然です。またTLSのようにセキュリティに気をつかうものでは、セキュリティホールへの対応などでパッケージ化を待っていられないこともあるので、ソースからコンパイルすることは多いです (個人の経験として)。 コンパイルは簡単です。ソースアーカイブを入手して、展開し、同梱されているドキュメントを読めばやり方が書いてあります。書いてあることをひとつひとつこなしていけば、必ずできます。 コンパイルにすごく時間がかかるって、どのくらいかかりますか (3日くらいですか?)。その間ほかの仕事ができないわけでもないでしょう。それに、OSのインストールなどはこれまで何回も (何10回も、何100回も) やってきたはずです。時間がかかるからやめとこう、とはならなかったでしょう。 いったん手順を確立すれば、あとは同じことの繰り返しです。それに最初に書いたように、ソフトウェアのポテンシャルを引き出すためにはコンパイルが必要です。 迷っているくらいなら、やってみればいいじゃないですか。やってみろー。こっちへ来~い。お前も仲間になれ~~。 (追記) コンパイルとインストール (アップデート) は別の操作です (典型的な例では、前者は「make」、後者は「make install」と別のコマンドを打ちます)。後者を実行してはじめて、実行ファイル等が指定の場所にコピー (アップデート時は上書き) されます。 本番機上でコンパイルも行う場合は、平常稼働中にコンパイルをすませておけばいいです。メンテナンス時間帯にサービス停止 → インストール (アップデート) → 動作確認 → サービス再開という流れになるでしょう。 アップデート失敗時の切り戻しについては、事前にアップデート対象の実行ファイル等をバックアップしておいて書き戻すことが考えられます。またほかの方法として、バージョン毎に別のディレクトリ (例: `/usr/local/nginx-1.11.9`) にインストールし、実際に使うバージョンにシンボリックリンク (例: `/usr/local/nginx`) を張って、実行ファイルを指定するときはシンボリックリンクのパスを使う、といった工夫も考えられます。こうすれば、切り戻しはリンク先を旧のディレクトリに戻してサービス再起動するだけでできます。