PrincipleworksJavaScriptがお使いのブラウザで無効になっているようです。このサイトをご覧いただくにはJavaScriptを有効にしていただく必要があります。×カートの中には何もありません。2017の1日目です。Magento2系を稼働させる環境を作る際に、切っても切れない関係にあるものがVarnishです。今回はこのVarnishのバージョン5.2系と、Varnish謹製のSSL/TLSフロントエンドのHitchを使って、HTTP/2に対応した環境を作ってみましょう。Linuxを使っています。Linuxをお使いの方は適当にここから先の内容を読み替えて進めてください。LTSで実行したものを記載しています。今回作成する構成は次の図のような構成です。サーバー1台の中に以下のプロセスを同居させる形なので、あまり低スペックでないほうが良いでしょう。本格稼働させる環境の場合は、最低でもMySQLくらいは別サーバーに切り出したいところですが、今回はお試しなので良いことにします。用意するのもの最初に用意するものを確認しておきます。少なくとも以下の2つは必要です。適当なスペックのサーバー(グローバルIPを持っているものならなんでも)適当なホスト名(DNSに設定済みであること)それでは環境を作っていきましょう。Magentoが動く環境を作るまず最初に、Magentoが動く環境を作ります。これは以下の記事を参考にするとスムーズに行くでしょう。Magento2のインストールがうまくいかないのかMagento2をcomposerからインストールするMagento2正式版インストール手順MagentoをインストールしてみようMagentoを動かすだけであればVirtualBoxとVagrantで作っても構いませんが、今回のメインはその話ではないので割愛します。LinuxにももちろんHitchやVarnishのパッケージは用意されているのですが、バージョンが少し古いものしか用意されていません。今回はHTTP/2に対応したバージョンを使いたいので、Hitchは1.4系、Varnishは5.2系を使用します。Varnishのインストールと設定Varnishの公式リポジトリは、PackageCloudにあります。bashを実行し、パッケージをインストールします。設定ファイルをMagentoからダウンロードするVarnishが無事にインストールできたら、次は設定を行います。Varnishを動かす場合、Varnishそのものの設定ファイルを調整する必要があります。独自のシステムやVarnishを想定していないパッケージの場合、この設定ファイルを自力で作成する必要がありますが、現在のMagentoはVarnishの仕様を想定しているので、管理画面から簡単に設定ファイルをダウンロードできます。設定ファイルのダウンロードは、Magentoの管理画面の「店舗>設定」でアクセスできるシステム設定画面の「システム」セクションにある「フルページキャッシュ」で行います。キャッシュ」に変更すると、「Varnish設定」という項目が出てきます。ここでVarnishのバージョンに合わせた設定ファイルがダウンロードできます。Magento2.1と2.2ではサポートするVarnishのバージョンが少し異なりますが、Varnish4系の設定ファイルをVarnish5系で使っても問題なく動作します。設定ファイルを設置するダウンロードした設定ファイルをサーバーの以下の場所に配置します。させるスクリプトを用意します。/etc/systemd/system/varnish.serviceがある場合は、viエディタなどで開きます。ファイルがない場合は、/lib/systemd/system/varnish.serviceからコピーして配置してください。このファイルにはVarnishの起動設定が書いてあるのですが、以下の箇所を変更しておきます。feature=+http2この例では、Varnishを80番と81番ポートで待ち受けさせています。Protocolで待機させ、Hitchから流れてくるデータを処理します。featureでhttp2を有効にしています。このオプションを付けることで、HTTP/2がVarnish上で有効になります。変更できたら以下のコマンドを実行し、設定ファイルの内容をsystemdに認識させます。varnishApacheのポート番号を変えるVarnishを起動させる前に、Apacheのポート番号を変えておきます。標準の設定ではApacheは80番ポートで起動しますが、Varnishが80番ポートを使うので、Apacheは8080番ポートで起動させます。Linuxの場合は/etc/apache2/ports.confに待ち受けポート番号が書いてあります。/etc/apache2/sites-enabled/<Magento用のconf>にあるバーチャルホストの設定にもポート番号が書いてあります。この両方を8080に変えておきましょう。変更できたらApacheを再起動し、続いてVarnishを起動させます。設定に不備がなければApacheとVarnishが両方とも起動するはずです。Hitchをインストールする次はHitchをインストールします。16.04用のパッケージはhttps://launchpad.net/~davividal-s/+archive/ubuntu/backportsでしか見つかりませんでした。ソースからコンパイルしてもいいのですが、今回は手軽に試したいので、このリポジトリのパッケージを利用します。リポジトリの追加リポジトリの追加はお作法通りです。updateと実行すれば基本的にはOKです。hitchでHitchがインストールできると思います。うまくインストールできたらHitchの設定を行います。設定ファイルの調整Hitchの設定ファイルは2つあります。/etc/systemd/system/hitch.service/etc/hitch/hitch.conf前者はVarnishと同じところに元ファイルがあるのでコピーします。後者のファイルは以下のような記述にしておきます。http/1.1"というところです。この記述を書かないと、HitchがHTTP/2で動作しません。Linuxで標準として使えるHitchはバージョン1.1で、この設定が利用できません。そのため今回は1.4系を使用したわけです。続いてHitchと連携できるようにVarnishとApacheの設定を変更します。Varnishの設定ファイルに追記Varnishの設定ファイルの52行目あたりに以下の追記を行います。"https";変更後はVarnishを再起動しておきましょう。Apacheの設定ファイルに追記Magentoを動作させるApacheのバーチャルホスト設定/etc/apache2/sites-enabled/<Magento用のconf>に以下の内容を追記します。HTTPS=on追記できたらApacheを再起動しておきます。この設定を行う意味Hitchを通すとHTTPS通信は全てHTTP通信として暗号化が解除された状態でVarnishやApacheに流れます。それ自体は望ましいのですが、Magentoと組み合わせる場合は少し具合の悪い点があります。Magentoは流れてきたリクエストがHTTPなのかHTTPSなのかでベースURLのどちらを使うかを判断します。この判断は以下のPHP上の変数を用いて行っています。あるとき、Magentoは通信がHTTPSで行われたものと認識します。それが443番ポートに来たものでなくとも、前段階でHTTPS通信が解除されたと認識してくれます。ある場合は、通信がHTTPSだったとしてもHTTPであるものとみなします。はじまるURLになっていた場合、Magentoは正しいURLにブラウザを誘導しようとするため、自動的にリダイレクトが起きます。ところがリダイレクト後でも同じことが繰り返されてしまうため、リダイレクトの無限ループが起きてしまい、サイトに全くアクセスできなくなります。この問題を回避するために、先程の設定を行うわけです。常時HTTPS化が求められている現在においては、この内容で多少余分に書き過ぎであっても目的を果たすことができます。今回の最終目的であるHTTP/2での通信は多くのブラウザでHTTPS通信が前提として実装されていることも見逃せないポイントです。Encryptで証明書を取得する仕上げにSSL証明書を取得します。Encryptを使います。certbotのサイトに書いてあるチュートリアルに従ってcertbotをインストールします。下記のコマンドを叩いていけばインストールできると思います。python-certbot-apacheApacheだけであればこのままcertbotで取得できるのですが、Hitchは一工夫加える必要があります。いうのもHitchは前述の設定ファイルをみていただければ分かる通り、SSL証明書に関する設定は1行しかありません。3行がありますが、Hitchはこれらを1つにまとめたファイルを使用します。Encryptを使うチュートリアルが公開されています。Linuxでも使えるので、この内容を参考にしましょう。最初にVarnishの設定ファイルを改造し、certbotに対応させます。/etc/varnish/default.vclに次の内容を書き込みます。あるはずなので、単純に追記でOKです。新しく書き込んでください。書き込めたらvarnishを再起動しておきます。Encryptの証明書をHitchが利用できるように1つのファイルに纏めるスクリプトを用意します。/usr/local/bin/hitch-renew-hookを作成し、次の内容を書き込みます。${RENEWED_LINEAGE}/hitch-bundle.pem作成したら実行権を与えておきます。いうファイルを使用します。次のコマンドで簡単に作成できるので、作成しておきましょう。証明書を取得しましょう。コマンドに幾つかパラメータを渡してやることで、証明書を取得できます。reload"フックスクリプトが自動的に証明書や秘密鍵を1ファイルにまとめて配置し、Hitchをリロードします。これでSSL証明書が手に入りました。ブラウザでアクセスして、HTTP/2で通信していることを確認する最後に動作チェックです。ブラウザの開発者ツールでアクセスし、HTTP/2で通信していることを確認しましょう。うまくHTTP/2で通信できているようです。アンチウイルスソフトなどの関係でうまくHTTP/2にならないことがあるケースが報告されています。うまくいかない場合は、一時的にアンチウイルスを止めてみると良いかもしれません(ずっと止めるのはダメですが)。まとめHitch1.4とVarnish5.2を使ってHTTP/2でコンテンツを配信できるMagento環境の構築手順をご紹介しました。HTTP/2は従来のHTTP1.xよりも通信効率が良くなるように設計されているため、モバイル端末や常時HTTPSを意識する際には無視できない要素です。kzkick2ndさんによる、「Magento2開発環境構築2017冬」です。