どのバックエンドから応答を取得したかを、http 応答ヘッダーで varnish に返すにはどうすればよいですか?

どのバックエンドから応答を取得したかを、http 応答ヘッダーで varnish に返すにはどうすればよいですか?

バックエンドにはラウンドロビン ディレクターを備えた 3 つのサーバーがあります。

応答を取得したサーバーの名前または IP を含む X-Server-By ヘッダーを varnish に書き込ませたいのですが、どうすればよいですか?

答え1

Varnish 3.0.2では以下を使用します:

sub vcl_fetch {
    set beresp.http.X-Backend = beresp.backend.name;
}

完璧に動作します。

答え2

sub vcl_fetch {
    set obj.http.X-Backend = req.backend;
}

私の (非ラウンドロビン) セットアップで 2.0.6 でテストしました。これで何か参考になるはずです。

答え3

Web サーバーにヘッダー (例: x-host: server2) を設定すると、varnish はそれをキャッシュ ヒットへの応答の一部として返します。

私はこれを Apache 上で動作させていますが、完璧に動作します。

答え4

以下はテストされていませんが、開始するには役立つかもしれません:

sub vcl_deliver {
    set resp.http.X-Served-By = server.hostname;
    deliver;
}

関連情報