サーバー設定 · 1 min read · Jan 01, 2026

Apacheの前にVarnishを配置する(Ubuntu/Debian)

Apacheの前にVarnishを配置する(Ubuntu/Debian)

Version 1.0, 15-10-2010
Follow me on Twitter

Varnishは、ウェブサイトの速度を向上させるために使用できるオープンソースの「ウェブアクセラレーター」です。

それは、画像やJavaScriptなどの特定の静的要素をキャッシュできますが、負荷分散や追加のセキュリティなどの他の目的にも使用できます。

このチュートリアルでは、後者に焦点を当てます。
このモードでは、Varnishは不完全なHTTPリクエストがApacheウェブサーバーに到達するのを防ぎます。

このチュートリアルはUbuntuを基にしていますが、Debianでもおそらく動作します。

まず、Apache2が実行されていて、設定されていることを確認してください。

Varnishのインストール

これは非常に簡単です。なぜなら、Ubuntuのリポジトリに含まれているからです。しかし、より新しいバージョンを確保するためにVarnishリポジトリを使用したいかもしれません。これを追加するには、次のコマンドを実行します:

sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list

APTを更新し、Varnishをインストールします:

sudo apt-get update
sudo apt-get install varnish

素晴らしい、これでVarnishがインストールされましたが、まだ設定する必要があります。

Varnishの設定変更

まず、デフォルトのポートを変更する必要があります。/etc/default/varnishを編集します:

vim /etc/default/varnish

少しスクロールして、「 DAEMON_OPTS 」で始まるコメントアウトされていない行を見つけます。

  • :6081*を:80*に変更して、デフォルトのHTTPポートでリッスンするようにします。
  • default.vclを他のものに編集します。私は「mysite.vcl」を使用しました。

ファイルを保存します。

前のファイルで言及したVCLファイルを編集します。私の場合、/etc/varnish/mysite.vclを編集します。次の内容を貼り付けます:

## localhostのポート8000で実行されているApacheへのリクエストをリダイレクト
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## フェッチ
sub vcl_fetch {
        ## 存在する場合はX-Forwarded-Forヘッダーを削除します。
        remove req.http.X-Forwarded-For;
        
        ## クライアントのIPアドレスをX-Forwarded-Forとして挿入します。これはユーザーの通常のIPアドレスです。
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## 追加のセキュリティ、「w00tw00t」攻撃は非常に迷惑なので、ウェブサーバーに到達する前にブロックしましょう。
        if (req.url ~ "^/w00tw00t") {
                error 403 "許可されていません";
        }
        ## コンテンツを配信
        return(deliver);
}

## 配信
sub vcl_deliver {
        ## Varnishによって追加された一部のヘッダーを隠します。人々にVarnishを使用していることを見せたくありません。
              ## まだキャッシュしていないので、なぜ人々にそれを使っていると知らせる必要があるのでしょうか?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
        
        ## X-Powered-Byヘッダーを隠したいです。誰もが私たちがPHPを実行でき、バージョンxyzを持っていることを知る必要はありません。
        remove resp.http.X-Powered-By;
}

ファイルを保存します。これでVarnishの部分は完了です。まだ起動しないでください。

Apacheの設定変更

さて、Apache2がlocalhostでリッスンするようにする必要があります。これには、いくつかの小さな変更が必要です。

vim /etc/apache2/ports.conf

次のように変更します:

NameVirtualHost *:80
Listen 80

を:

NameVirtualHost *:8000
Listen 127.0.0.1:8000

Apacheはそのポートでリッスンします。vhostsも編集する必要があります。vhostを開き、次のように置き換えます:

ここまで順調です。ユーザーのIPアドレスが正しく表示されるようにするために、追加のApacheモジュールをインストールする必要があります。Varnishは基本的にApache2と通信しているため、訪問者のIPは127.0.0.1として表示されます。

apt-get install libapache2-mod-rpaf

RPAF(Reverse Proxy Add Forward)モジュールは、127.0.0.1のIPがVarnishによって設定されたX-Forwarded-ForのIPに置き換えられることを保証します。

デーモンの再起動

Apacheを再起動します:

/etc/init.d/apache2 restart

次のコマンドを実行して、正しいIP/ポートにバインドされているか確認します:

netstat -lp | grep apache2

次のように表示されれば:

tcp        0      0 localhost:8000          *:*                     LISTEN      4586/apache2

これは正しいです。そうでなければ、間違いを犯しました。さて、Varnishを再起動してポート80でリッスンさせる必要があります。

/etc/init.d/varnish restart

次のコマンドを実行して再度確認します:

netstat -lp | grep varnish

結果は次のようになります:

tcp        0      0 *:www                   *:*                     LISTEN      4498/varnishd  
tcp6       0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd

(はい、VarnishはIPv6アドレスでもリッスンします。)

さて、これでVarnishをApache2の前に配置しました。サイトがまだ機能するかどうかを確認するために、単に訪問してみてください。何も起こらなかったかのようにサイトが表示されます。Apacheをシャットダウンすることでさらにテストできます。その場合、Varnishエラーページが表示されます。

ボーナス機能

さて、「Apache」から別のHTTPサーバー名に変更したいかもしれません。これは、/etc/varnishにあるVCLファイルを編集することで行えます。次のように:

sub vcl_fetch {

の後に次を追加します:

## http.Serverヘッダーを削除
unset obj.http.Server;
## http.Serverヘッダーを別のものに変更
set obj.http.Server = "Incognito";

明らかに、あなたが望むものに見せることができます。例えば、Yourdomain.comのように。サーバー上のすべてのドメインが同じサーバー名を使用することに注意してください。

さて、これで終わりです。あなたは今、Apacheの前にリバースプロキシを持っています!
少しの調整で、キャッシュや負荷分散を行うことができます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。