
Varnish について読み始めたばかりで、Web サーバーのフロントエンドとして使用することを検討しています。Web サーバーには複数のドメインがあり、同じクエリ文字列を使用すると同じコンテンツが取得されます。たとえば、あるクライアントが次のサイトにアクセスするとします。
http://domain1.com/script.php?string1=abc&string2=123
そして後ほど、別の誰かが訪問します。
http://domain2.com/script.php?string1=abc&string2=123
Varnish は最初の訪問の結果をキャッシュし、それを 2 番目のクライアントに使用しますか? ありがとうございます!
編集:さらに読んでみると、次の方法がうまくいくようです。
sub vcl_hash {
set req.hash += req.url;
return (hash);
}
したがって、ハッシュに http.host 変数を追加する代わりに、それを無視します。
答え1
ある程度、そうするように設定できます。デフォルトでは、そうはなりません (そうすべきではありません)。
ホスト名が多数あるサイトがありますが、キャッシュが増殖しないようにするにはどうすればよいでしょうか?
これは、すべてのホスト名の「Host」ヘッダーを正規化することで実現できます。次に VCL の例を示します。
if (req.http.host ~ "^(www.)?example.com") { set req.http.host = "example.com"; }
答え2
私の VM には 3 つのドメインがあり、Nginx と Varnish を使用しています。現在は、pre-prod 構成で作業しています。ここでは、次の作業を行っています。
NGINX:80 ==> VARNISH:8080 ==> NGINX:8081
ドメインに Varnish が必要な場合は、プロキシのように Nginx:80 を使用します。そうでない場合は、FastCGI を使用します。この例では、Varnish ではないサイトは Varnish の影響を受けません。馬鹿げているように見えますが、うまく機能します ;-) また、私の顧客から苦情を言う人はいません (今のところ....)。