現在のページにアクセスしたときのことを考えてみてください。おそらく、ニュースレターで受け取ったリンクをクリックしたか、Tecmint.comのホームページ上のリンクをクリックして、この記事に移動しました。
簡単に言えば、あなた(実際はブラウザ)はこのサイトをホストしているウェブサーバーにHTTPリクエストを送信し、サーバーからHTTPレスポンスが返されました。
これがどれほど簡単に聞こえるかにかかわらず、このプロセスにはそれ以上のことが必要です。見やすくフォーマットされたページを表示するためには、サーバーサイドで多くの処理が必要であり、その中には静的なものや動的なものも含まれます。
もっと深く掘り下げない限り、Webサーバーが同時に多くのリクエストに応答する必要がある場合(初めは数百件程度に限定しても)、まもなくサーバー自体またはシステム全体が混乱状態に陥る可能性があります。
そして、そこで高性能なHTTPアクセラレータおよびリバースプロキシであるVarnishが助けになります。この記事では、VarnishをApacheまたはNginxのフロントエンドとしてインストールして使用し、HTTPレスポンスを高速にキャッシュし、Webサーバーにさらなる負荷をかけずに行う方法を説明します。
ただし、Varnishは通常、ディスクではなくメモリにキャッシュを保存するため、キャッシュの割り当てられるRAMスペースに注意する必要があります。これについては後で説明します。
目次
Varnishの動作方法

LinuxサーバーにVarnishキャッシュをインストールする
この投稿では、LAMPまたはLEMPサーバーがインストールされていることを前提としています。そうでない場合は、進む前にこれらのスタックのいずれかをインストールしてください。
- RHELベースのディストリビューションにLAMPサーバーをインストールする方法
- UbuntuにLAMPサーバーをインストールする方法
- DebianにLAMPサーバーをインストールする方法
- RHELベースのディストリビューションにLEMPサーバーをインストールする方法
- UbuntuにLEMPサーバーをインストールする方法
- DebianにLEMPサーバーをインストールする方法
公式のドキュメントでは、常に最新バージョンを提供するため、開発者のリポジトリからVarnishをインストールすることが推奨されています。ディストリビューションの公式リポジトリからパッケージをインストールすることもできますが、やや古いバージョンかもしれません。
また、プロジェクトのリポジトリは64ビットシステムのみをサポートしており、32ビットマシンの場合は、あなたのディストリビューションの公式に維持されているリポジトリに頼る必要があります。
この記事では、各ディストリビューションが公式にサポートしているリポジトリからVarnishをインストールします。この決定の主な理由は、インストール方法の一貫性を提供し、すべてのアーキテクチャの自動依存関係解決を保証するためです。
DebianベースのLinuxでVarnishをインストールする
Debianベースのディストリビューションでは、aptコマンドを使用してVarnishをインストールできます。
# apt update # apt install varnish

RHELベースのLinuxでVarnishをインストールする
RHELベースのディストリビューション、例えばCentOS、Rocky、AlmaLinuxでは、以下のようにyumコマンドを使用してVarnishをインストールする前にEPELリポジトリを有効化する必要があります。
# yum install epel-release # yum update # yum install varnish

インストールが正常に完了すると、あなたのディストリビューションに応じて以下のいずれかのvarnishバージョンがあります。
# varnishd -V varnishd (varnish-6.5.1 revision 1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64)
最後に、インストールプロセスがそれを行っていない場合は、Varnishを手動で起動し、ブート時に起動するように有効化する必要があります。
# systemctl start varnish # systemctl enable varnish # systemctl status varnish

デフォルトでは、6081ポートがvarnishサービスによって使用されており、以下のnetstatコマンドを実行することで確認できます。
# netstat -tunlp | grep 6081

LinuxでのVarnish Cacheの構成
前述したように、Varnishは外部クライアントとウェブサーバーの間に位置しています。そのため、キャッシングがエンドユーザーに対して透過的になるように、以下のことが必要です。
- デフォルトのポート 6081 を、Varnishがリッスンするポート 80 に変更します。
- また、Webサーバーがリッスンするデフォルトのポートを 8080 に変更し、デフォルトの 80 ではなくします。
- Varnishからの着信トラフィックをWebサーバーにリダイレクトします。幸いなことに、Varnishは1) と 2) の手順を完了すると自動的にこれを行います。
Varnishポートの変更
varnishd プロセスは systemd によって制御され、デフォルトのVarnishランタイム構成を保持する /usr/lib/systemd/system/varnish.service にある単位ファイルです。
ここで、デフォルトのvarnishポートを 6081 から 80 に変更し、キャッシュサイズを 1GB にする必要があります。以下のコマンドを実行すると、単位ファイルがエディタで開かれます。
注意: ハードウェアリソースに応じてメモリ量を変更するか、キャッシュファイルをディスクに保存することもできます。
$ sudo systemctl edit --full varnish OR # systemctl edit --full varnish

/etc/systemd/system/varnish.service ファイルを変更した後、以下のコマンドを実行して Systemd デーモンを再読み込みする必要があります。
# systemctl daemon-reload
ApacheまたはNginxポートの変更
Varnishポートを変更した後、デフォルトのApacheまたはNginxウェブサーバーポートを80から最も一般的なネットワーキングポートに、すなわち8080に変更する必要があります。
---------- On Debian-based Systems ---------- # nano /etc/apache2/ports.conf [On Apache] # /etc/nginx/sites-enabled/default [On Nginx] ---------- On RHEL-based Systems ---------- # vi /etc/httpd/conf/httpd.conf [On Apache] # vi /etc/nginx/nginx.conf [On Nginx]

変更が完了したら、Varnishとウェブサーバーを再起動することを忘れないでください。
# systemctl restart varnish ---------- On Debian-based Systems ---------- # systemctl restart apache2 # systemctl restart nginx ---------- On RHEL-based Systems ---------- # systemctl restart httpd # systemctl restart nginx
LinuxでのVarnish Cacheのテスト
最初のテストは、HTTPリクエストをcurlコマンドで行い、Varnishによって処理されていることを確認することです。
# curl -I http://localhost

Varnishには便利なツールも2つ含まれています。
- リアルタイムでVarnishログを表示する、直感的に呼ばれるvarnishlog。
- Varnishキャッシュ統計を表示する、varnishstat。
2つ目のテストとして、以下のスクリーンキャストでは、HTTPリクエストが送信され、応答が受信されるにつれて、CentOSサーバー(dev1、画面上部)とDebianサーバー(dev2、画面下部)の両方でログと統計を表示します。
ウェブサーバーパフォーマンスベンチマークのテスト
私たちの3番目で最後のテストは、abベンチマーキングツールを使用してウェブサーバーとVarnishのベンチマークを行い、それぞれの場合の応答時間とCPU負荷を比較することで構成されます。
この特定の例では、CentOSサーバーを使用しますが、任意のディストリビューションを使用して類似の結果を得ることができます。負荷平均を一番上で見て、abの出力のRequests per second行を観察してください。
abを使用して、同時に50 (-c 50)のコンカレントリクエストを送信し、テストを1000000回繰り返します(-n 1000000で示されます)。Varnishは1秒あたりのリクエスト数が多く、負荷平均がはるかに低くなります。
重要: Varnishがポート80(デフォルトのHTTPポート)でリッスンしており、Apacheがポート8080でリッスンしていることを覚えておいてください。また、各テストを完了するために必要な時間の量もメモしておくことができます。
# ab -c 50 -n 100000 http://localhost/index.html
結論
この記事では、Varnishキャッシュをウェブサーバー、Apache、またはNginxの前に設置する方法について説明しました。default.vcl構成ファイルについては深く掘り下げていませんが、これによりキャッシングポリシーをさらにカスタマイズできます。
さらに構成例については公式ドキュメントを参照するか、以下のフォームを使用してコメントを残してください。
Source:
https://www.tecmint.com/install-varnish-cache-server/