Varnishについて
今週FastlyのStockholm(BMA)で障害が発生1し、私たちのサイトも影響を受けました。その際出てきた「varnish」というミドルウェアについて調べたときのメモです。
Varnishとは
Varnish Cache is a web application accelerator also known as a caching HTTP reverse proxy.
- HTTPレベルでキャッシュを行うHTTPアクセラレータ。
- カーネルの機能を最大限利用することで高速化を図っている。
- ディスクへのデータ書き込みをデフォルトでは一切しないので、プロセス終了時に全てのキャッシュが消える。
- 設定はVCL(Varnish Configuration Language)というDSLで記述する。動的に変更可能。
- ログもデフォルトではファイルに書き込まれない。
- Fastlyの中心技術2。各リージョンにVarnishキャッシュサーバを置いていると雑に考えても間違いではなさそう。
- SSLが使えないのでnginxを前に置く構成が多いらしい。
動かしてみる
varnishをnginxの手前に置いて、nginxのindex.htmlをvarnish経由で返してみる。
参考記事: Getting Started with Varnish Cache
環境
1. コンテナの起動 3
$ docker run --privileged -d -p80:80 --name=varnish centos /sbin/init
2. nginxのインストール&起動 4
$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
$ yum install -y nginx $ systemctl start nginx
3. Varnish Cashのインストール
$ yum install -y epel-release $ yum install -y varnish
4. nginxのポートを8080に変更
etc/nginx/conf.d/default.conf
server { listen 8080; ... }
リロード
$ systemctl reload nginx
5. varnishのポートを80に変更
etc/varnish/varnish.params
VARNISH_LISTEN_PORT=80
起動
$ systemctl start varnish
6. アクセスしてみる
$ curl -I http://localhost HTTP/1.1 200 OK Server: nginx/1.13.6 Date: Sun, 19 Nov 2017 10:46:05 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 10 Oct 2017 15:59:40 GMT ETag: "59dcee6c-264" X-Varnish: 22 20 Age: 3 Via: 1.1 varnish-v4 Connection: keep-alive
2回目アクセス以降X-Varnish
の値が2つ返っていればキャッシュされている5。
また、nginxのアクセスログに2回目以降のアクセスログが残らないことも確認できた。(キャッシュ間隔のデフォルトは5分。)
疑問
- (リバースプロキシとしている)nginxでも同じことができるのではないか。
- わざわざnginxの後ろにVarnishを置く理由。