Varnish を Azure Web Apps でフロントエンド キャッシュとして使用する

このポストは、10 月 6 日に投稿された Using Varnish as front end cache for Azure Web Apps の翻訳です。

 

Varnish は、コンテンツ容量の大きい Web サイトや API 使用頻度の高い環境向けに設計された HTTP アクセラレータです。Varnish サーバーは簡単に Azure Web Apps に追加でき、Web サイトのパフォーマンスを大幅に向上させることができます。Web ページをキャッシュすることで、コンテンツを非常に迅速に提供します。この記事では、Varnish のインストール方法と構成方法、および構成ファイルのサンプルをご紹介します。

 

ステップ 1: Linux 仮想マシンを使用して Azure でクラウド サービスを作成する

まず、Linux 仮想マシンでクラウド サービスをセットアップする必要があります。詳細はこちらのページを参照してください。ほとんどの Web アプリの場合、VM は 1 台で十分ですが、障害耐性の高いフロントエンド キャッシュが必要な場合は 2 台使用することをお勧めします。今回は Ubuntu LTS を使用します。

 

ステップ 2: VM に Varnish をインストールする

Varnish パッケージは varnish-cache.org (英語) で配布されているものを使用することをお勧めします。Ubuntu LTS でサポートされているアーキテクチャは amd64 のみです。他の種類の Linux についてはこちらのインストール ガイド (英語) を参照してください。PuTTY (英語) を使用して各仮想マシンとの接続を確立してから、ルート ユーザーとして下記の手順を実施します。

  • セキュリティ キーを追加します (Debian および Ubuntu の場合)。
 wget https://repo.varnish-cache.org/debian/GPG-key.txt apt-key add GPG-key.txt
  • パッケージの URL を apt-get のリポジトリのソース リストに追加します。
 echo "deb https://repo.varnish-cache.org/ubuntu/ precise varnish-3.0" | sudo tee -a /etc/apt/sources.list
  • パッケージ マネージャーを更新し、Varnish Cache をダウンロードしてインストールします。
 apt-get update <br>apt-get install varnish

 

ステップ 3: Varnish を構成する

既定では、通常使用されている 80 番 (HTTP) または 443 番 (HTTPS) ポートに設定されていないため、Web アプリで使用するポートに変更する必要があります。80 番は HTTP トラフィックの TCP プロトコルの既定ポートです。Web サイトで SSL を使用する場合は、HTTPS トラフィックの既定のポートである 443 番も開く必要があります。

Azure プレビュー ポータルにログインし、仮想マシンを選択して、80 番 (HTTP) と 443 番 (HTTPS) のポートをエンドポイントとして追加します。この設定はすべての仮想マシンで行う必要があります。Ubuntu の場合、構成ファイルは /etc/default/varnish ディレクトリに配置されています。このファイルをお好みのエディター (今回は nano エディターを使用) で編集します。

 nano /etc/default/varnish

このファイルには既定の設定がいくつか含まれています。ファイルの中に Varnish デーモンのオプションを定義する部分があります。下記のように "DAEMON_OPTS" というテキストから始まります。

 DAEMON_OPTS="-a :6081 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"

ポート番号を 6081 から 80 (HTTP) または 443 (HTTPS) に変更します。

 DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"

既定では 80 番または 443 番はファイアウォールによりブロックされています。このため、ufw ("uncomplicated Firewall" (簡易ファイアウォール) の略) コマンドまたは iptables コマンドを使用して明示的にポートを開きます。

ufw コマンドを使用する場合

まず ufw コマンドを有効化します。

 ufw enable

ufw が有効化されたら、ufw コマンドを使用して 80 番ポートを開きます。

 ufw allow 80

443 番ポート (HTTPS) の場合は次のコマンドを実行します。

 ufw allow 443

iptables コマンドを使用する場合

下記のコマンドを実行すると 80 番ポートが開かれ、このポートを経由する通常の Web サイトの閲覧が可能になります。

 iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

セキュリティ サイトへのアクセスは、443 番ポートを開く必要があります。

 iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT 
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT

 

ステップ 4: /etc/varnish/ に格納されている既定の VCL ファイルを変更する

.vcl ファイル (既定では /etc/varnish/ ディレクトリに default.vcl ファイルとして格納されています) には、プログラムの実行に使用される指示が VCL 言語で記述されています。Varnish ではこのファイルに従って要求の処理やドキュメント キャッシュ システムの動作を決定します。

下記のコマンドを実行してエディターを再び開き、/etc/varnish/ に格納されている default.vcl を編集します。

 nano /etc/varnish/default.vcl

.host および .port を使用して、Azure の Web アプリを参照する既定のバックエンドを作成します。下に示すのは基本的な VCL 構成ファイルの例です。このサンプルの my-azure-webapp.azurewebsites.net の部分を、実際に使用する Web アプリケーションのカスタム ドメインまたは azurewebsite.net ドメインの URL に変更します。Varnish 4.0 またはそれ以降を使用する場合は、ファイルの冒頭に必ず vcl 4.0 と記述してください。

 vcl 4.0;
backend default {

      .host = "my-azure-webapp.azurewebsites.net";
      .port = "80";
      .connect_timeout = 600s;
      .first_byte_timeout = 600s;
      .between_bytes_timeout = 600s;
}
sub vcl_recv {
     set req.http.host = "my-azure-webapp.azurewebsites.net";
     set req.backend = default;
     return (lookup);
}

 

トラブルシューティング

Varnish サーバーで何らかの問題が発生した場合は、次のコマンドでログを表示できます。

 varnishlog cmd

再びサイトを表示し、VM 内のログ ファイルを確認します。詳細についてはこちらのページ (英語) を参照してください。

 

VCL 構成ファイルのサンプル

  • WordPress

WordPress Web アプリを使用している場合、こちらのページ (英語) から WordPress 用の Varnish 構成ファイルのサンプルをダウンロードできます。

  • Drupal

Drupal Web アプリを使用している場合、こちらのページ (英語) から Drupal 用の Varnish 構成ファイルのサンプルをダウンロードできます。