前書き

このチュートリアルでは、既存のWebサーバーのパフォーマンスを向上させるためにVarnish Cache 4.0を使用する方法について説明します。 また、NginxがSSL終了を実行することで、ワニスにHTTPSサポートを追加する方法も示します。 既にWebアプリケーションサーバーがセットアップされていることを前提とし、開始点として汎用LAMP(Linux、Apache、MySQL、PHP)サーバーを使用します。

Varnish Cacheは、キャッシュHTTPリバースプロキシまたはHTTPアクセラレータであり、ユーザーにコンテンツを提供するのにかかる時間を短縮します。 使用する主な手法は、Webサーバーまたはアプリケーションサーバーからの応答をメモリにキャッシュすることです。そのため、同じコンテンツに対する今後の要求は、Webサーバーから取得することなく処理できます。 さまざまな環境でパフォーマンスを大幅に向上させることができ、コンテンツが大量の動的なWebアプリケーションがある場合に特に役立ちます。 Varnishは、主な機能としてキャッシュを使用して構築されましたが、リバースプロキシロードバランシングなどの他の用途もあります。

多くの場合、Varnishはデフォルトで適切に機能しますが、特定のアプリケーション、特にCookieを使用するアプリケーションのパフォーマンスを改善するために調整する必要があることに留意してください。 ワニスの詳細なチューニングは、このチュートリアルの範囲外です。

前提条件

このチュートリアルでは、プライベートIPアドレスでHTTP(ポート80)でリッスンしているWebアプリケーションサーバーが既にあると仮定します。 Webサーバーをまだ設定していない場合は、次のリンクを使用して独自のLAMPスタックを設定してください:https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql- php-lamp-stack-on-ubuntu-14-04 [Linux、Apache、MySQL、PHP(LAMP)スタックをUbuntu 14.04にインストールする方法]。 このサーバーを* LAMP_VPS *と呼びます。

image:https://assets.digitalocean.com/articles/varnish/prereq.png [既存の環境]

Varnishのインストールに使用される新しいUbuntu 14.04 VPSを作成する必要があります。 Ubuntuの初期サーバーセットアップ14.04ガイド。 このサーバーを* Varnish_VPS *と呼びます。

Varnishサーバーはユーザーリクエストを受信するため、受信するトラフィックの量に合わせて適切なサイズにする必要があることに注意してください。

私たちの目標

image:https://assets.digitalocean.com/articles/varnish/goal.png [目標]

私たちの目標は、Webアプリケーションサーバーの前にVarnish Cacheをセットアップして、リクエストを迅速かつ効率的に処理できるようにすることです。 キャッシュを設定した後、Nginxを使用して着信SSL要求を処理することにより、VarnishにHTTPSサポートを追加する方法を示します。 セットアップが完了すると、HTTPトラフィックとHTTPSトラフィックの両方で、キャッシュのパフォーマンス上の利点がわかります。

前提条件が設定され、構築しようとしているものがわかったので、始めましょう!

ニスをインストール

Varnish 4.0の最新リリースを入手するための推奨される方法は、公式リポジトリから利用可能なパッケージをインストールすることです。

Ubuntu 14.04には `+ apt-transport-https +`が付属していますが、_Varnish_VPS_で次のコマンドを実行するだけで確認できます。

sudo apt-get install apt-transport-https

次に、aptにVarnish GPGキーを追加します。

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add -

次に、aptソースのリストにVarnish 4.0リポジトリを追加します。

sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list'

最後に、apt-getを更新し、次のコマンドを使用してVarnishをインストールします。

sudo apt-get update
sudo apt-get install varnish

デフォルトでは、Varnishはポート「6081」をリッスンするように設定されており、Webサーバーが同じサーバー上にあり、ポート「8080」をリッスンすることを想定しています。 ブラウザを開き、サーバーのポート6081に移動します(強調表示された部分をパブリックIPアドレスまたはドメインに置き換えます)。

http://:6081

Varnishを新しいVPSにインストールしたため、サーバーのパブリックIPアドレスまたはドメイン名のポート「6081」にアクセスすると、次のエラーページが返されます。

image:https://assets.digitalocean.com/articles/varnish/varnish_initial_error.png [503 Error]

これは、Varnishがインストールされ実行されているが、キャッシュすることになっているWebサーバーが見つからないことを示しています。 ここで、Webサーバーをバックエンドとして使用するように設定しましょう。

ワニスを構成する

最初に、_LAMP_VPS_をバックエンドとして使用するようにVarnishを構成します。

Varnish設定ファイルは `+ / etc / varnish / default.vcl +`にあります。 今すぐ編集しましょう:

sudo vi /etc/varnish/default.vcl

次の行を見つけます。

backend default {
   .host = "127.0.0.1";
   .port = "8080";
}

そして、 + host`と + port`の値を、それぞれLAMPサーバーのプライベートIPアドレスとリッスンポートに合わせて変更します。 WebアプリケーションがプライベートIPアドレスとポート80でリッスンしていると仮定していることに注意してください。 そうでない場合は、ニーズに合わせて構成を変更します。

backend default {
   .host = "";
   .port = "";
}

Varnishには「猶予モード」と呼ばれる機能があり、有効にすると、Webサーバーのバックエンドがダウンして利用できなくなった場合に、要求されたページのキャッシュコピーを提供するようVarnishに指示します。 今それを有効にしましょう。 次の `+ sub vcl_backend_response +`ブロックを見つけて、強調表示された次の行を追加します。

sub vcl_backend_response {


}

これにより、キャッシュされたページの猶予期間が1時間に設定されます。つまり、新しいコピーを探すためにWebサーバーに到達できない場合、Varnishはキャッシュされたページを最大1時間提供し続けます。 これは、アプリケーションサーバーがダウンし、Webサーバーを再起動しているときに、エラーページ(以前に確認した503エラーなど)ではなく、古いコンテンツをユーザーに提供する場合に便利です。

`+ default.vcl +`ファイルを保存して終了します。

VarnishをデフォルトのHTTPポート(80)でリッスンするように設定すると、ユーザーがURLに異常なポート番号を追加せずにサイトにアクセスできるようになります。 これは `+ / etc / default / varnish +`ファイルで設定できます。 今すぐ編集しましょう:

sudo vi /etc/default/varnish

多くの行が表示されますが、それらのほとんどはコメント化されています。 次の `+ DAEMON_OPTS +`行を見つけます(すでにコメント解除されているはずです):

DAEMON_OPTS="-a :6081 \

`+ -a +`オプションは、Varnishがリクエストをリッスンするアドレスとポートを割り当てるために使用されます。 デフォルトのHTTPポートであるポート80をリッスンするように変更しましょう。 変更後、次のようになります。

DAEMON_OPTS="-a : \

保存して終了。

次に、Varnishを再起動して、変更を有効にします。

sudo service varnish restart

ここで、パブリックIPアドレスでVarnishサーバーにアクセスし、今度はポート80(HTTP)でWebブラウザーでテストします。

http://

LAMP_VPSから提供されるものと同じものが表示されるはずです。 私たちの場合、それは単なるApache2 Ubuntuページです。

image:https://assets.digitalocean.com/articles/varnish/apache_default.png [Apache2 Ubuntu Default Page]

この時点で、ワニスはアプリケーションサーバーをキャッシュしています。できれば、応答時間の短縮によるパフォーマンスの向上が期待できます。 既存のアプリケーションサーバーを指すドメイン名がある場合、_VarnishVPSpublic_IP_を指すようにDNSエントリを変更できます。

基本的なキャッシュを設定したので、NginxでSSLサポートを追加しましょう!

NginxによるSSLサポート(オプション)

VarnishはSSL終了をネイティブにサポートしていないため、HTTPSトラフィックを処理することのみを目的としてNginxをインストールします。 自己署名SSL証明書を使用してNginxをインストールおよび構成する手順と、HTTPS接続からVarnish over HTTPへのリバースプロキシトラフィックについて説明します。

Nginxを使用した自己署名SSL証明書のセットアップの詳細については、https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificateを参照してください。 -on-nginx-for-ubuntu-14-04 [Ubuntu用Nginxを使用したSSL]。 StartSSLから証明書を試す場合は、https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-with-a-free-signed-ssl-certificate-on-a -vps [これをカバーするチュートリアルがあります]。

Nginxをインストールしましょう。

Nginxをインストールする

_Varnish_VPS_で、次のaptコマンドを使用してNginxをインストールします。

sudo apt-get install nginx

インストールが完了すると、Nginxが実行されていないことがわかります。 これは、デフォルトでポート80でリッスンするように構成されているが、Varnishはすでにそのポートを使用しているためです。 デフォルトのHTTPSポートであるポート443でリッスンするため、これは問題ありません。

使用するSSL証明書を生成しましょう。

自己署名SSL証明書を生成する

_Varnish_VPS_で、SSL証明書を配置できるディレクトリを作成します。

sudo mkdir /etc/nginx/ssl

自己署名の2048ビットSSLキーと証明書のペアを生成します。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

ドメイン名と一致するように「+ common name +」を設定してください。 この特定の証明書の有効期限は1年です。

証明書が準備できたので、それを使用するようにNginxを構成しましょう。

Nginxを構成する

デフォルトのNginxサーバーブロック構成を編集用に開きます。

sudo vi /etc/nginx/sites-enabled/default

ファイル内のすべてを削除し、次のものに置き換えます(そして、ドメイン名に合わせて `+ server_name +`を変更します):

server {
       listen 443 ssl;

       server_name ;
       ssl_certificate /etc/nginx/ssl/nginx.crt;
       ssl_certificate_key /etc/nginx/ssl/nginx.key;

       location / {
           proxy_pass http://127.0.0.1:80;
           proxy_set_header X-Real-IP  $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto https;
           proxy_set_header X-Forwarded-Port 443;
           proxy_set_header Host $host;
       }
}

保存して終了。 上記の構成には、いくつかの重要な行があり、それらについて詳しく説明します。

他の「+ proxy_set_header +」行は、元のユーザーのIPアドレスなどの情報をユーザーリクエストとともに転送するようにNginxに指示します。

Nginxを起動して、サーバーがHTTPSリクエストを処理できるようにします。

sudo service nginx start

今度は、Webブラウザーを使用して、パブリックIPアドレスを使用してVarnishサーバーにアクセスし、ポート443(HTTPS)でテストします。

https://

*注:*自己署名証明書を使用した場合、「サイトのセキュリティ証明書は信頼されていません」などの警告が表示されます。 証明書を作成したことがわかっているので、続行しても安全です。

繰り返しますが、以前と同じアプリケーションページが表示されます。 違いは、実際にNginxサーバーにアクセスすることです。NginxサーバーはSSL暗号化を処理し、暗号化されていない要求をVarnishに転送します。Varnishは要求を通常のように処理します。

バックエンドWebサーバーを構成する

バックエンドWebサーバーがそのすべてのネットワークインターフェイスにバインドしている場合(つまり、 パブリックおよびプライベートネットワークインターフェイス)、プライベートインターフェイスのみでリッスンするようにWebサーバーの構成を変更する必要があります。 これは、ユーザーがパブリックIPアドレスを介してバックエンドWebサーバーに直接アクセスすることを防ぐためです。これにより、ニスキャッシュがバイパスされます。

ApacheまたはNginxでは、これにはバックエンドサーバーのプライベートIPアドレスにバインドするために `+ listen +`ディレクティブの値を割り当てることが含まれます。

ワニスのトラブルシューティング

ワニスがページを適切に提供するのに問題がある場合は、ワニスが舞台裏で何をしているかを確認するのに役立つコマンドをいくつか紹介します。

統計

キャッシュのパフォーマンスを把握したい場合は、 `+ varnishstat +`コマンドをご覧ください。 このように実行してください。

varnishstat

次のような画面が表示されます。

画像:https://assets.digitalocean.com/articles/varnish/varnishstat.png [ワニス統計]

さまざまな統計が表示されます。上下の矢印を使用してスクロールすると、各アイテムの簡単な説明が表示されます。 + cache_hit +`統計は、キャッシュされた結果で処理されたリクエストの数を示します。この数値は、クライアントリクエストの合計数( `+ client_req +)にできるだけ近づける必要があります。

終了するには、「+ q +」を押します。

Logs

ストリーミングログの形式でVarnishが個々のリクエストをどのように処理しているかの詳細なビューを取得したい場合は、 `+ varnishlog +`コマンドを使用します。 このように実行してください。

varnishlog

実行したら、Webブラウザーを介してVarnishサーバーにアクセスしてみてください。 Varnishに送信するリクエストごとに、Varnish設定のトラブルシューティングと調整に役立つ詳細な出力が表示されます。

終了するには、 `+ CTRL + C +`を押します。

結論

Webサーバーの前にVarnish Cacheサーバーがあるため、ほとんどの場合、パフォーマンスが向上します。 Varnishは非常に強力で調整可能であり、それを最大限に活用するには追加の調整が必要になる場合があることに注意してください。