読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

Varnish でキャッシュサーバ構築

Varnish というリバースプロキシを使って簡単なキャッシュサーバを構築します。 キャッシュサーバを使って静的ファイルであったり、PHPでの重い処理を初回だけで済ませて高速化します。

 

◆環境

Ubuntu 14.04

Apache 2.4.7

Varnish 3.0.5

 

◆事前準備

Webサーバ用のApacheと重い処理の検証コード書くためにPHPを入れておきます。

$ sudo aptitude install apache2 php5 libapache2-mod-php5

インストールしたら検証用コードを作ります。

$ sudo mkdir /var/www/html/test
$ sudo vim /var/www/html/test/index.php
<?php
sleep(3);
?>
hello world

確認してみましょう

$ curl localhost/test/
hello world

3秒後に表示されました。ちゃんと動きますね。

 

Apache のポートを変更する

通常の80番ポートの設定を

クライアント(80) ー (80)Webサーバ

クライアント(80) ー (80)Varnish(8080) ー (8080)Webサーバ

とするために、設定ファイルを編集します。 変更するファイルは2つです。 /etc/apache2/ports.conf /etc/apache2/sites-available/000-default.conf

$ sudo vim /etc/apache2/ports.conf

80番ポートを8080番に変更します。

Listen 8080

もう1つも編集します。

$ sudo vim /etc/apache2/sites-available/000-default.conf
<VirtualHost *:8080>

編集が終わったら再起動します。

$ sudo service apache2 restart

確認します。

$ curl http://192.168.33.10:8080/test/
hello world

ポートを変えて動くことが確認できました。

 

◆Varnish を導入する

$ sudo aptitude install varnish

ポートとWebサーバ指定のために2つファイルを編集します。 /etc/default/varnish /etc/varnish/default.vcl デフォルトでは 6081 となっているVarnishのポートを 80 に変更します。

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

次にバーチャルホストの設定をします。先ほど Apache で設定した 8080 番ポートを指定します。

$ sudo vim /etc/varnish/default.vcl
backend default {
    .host = "127.0.0.1";
    .port = "8080";

設定したら再起動します。

$ sudo service varnish restart

 

◆abで動作検証

ab をインストールしておきます。

$ sudo aptitude install apache2-utils

Apache のみの場合

$ ab -n5 -c1 http://localhost:8080/test/
Time taken for tests:   15.011 seconds

5リクエスト投げていて、1つの処理に3秒スリープがあるので合計15秒。 すべてのリクエストでPHPの処理が走っていますね。

 

◯Varnish を使った場合

$ ab -n5 -c1 http://localhost/test/
Time taken for tests:   3.004 seconds

最初のリクエストではsleepが走りますが、以降のリクエストではキャッシュによる高速化ができてますね。 これで一度キャッシュが作られたのでもう一度実行してみましょう。

$ ab -n5 -c1 http://localhost/test/
Time taken for tests:   0.001 seconds

めちゃくちゃ早いですね。

Varnish はキャッシュの永続化をしないため、再起動するとキャッシュクリアされます。

以上です。お疲れ様でした。

 

ソース:

INSTALL VARNISH 3 TO RUN WITH APACHE 2 ON UBUNTU SERVER

とってもやさしいリバースプロキシVarnishの使い方