いくつかのバックエンドをセットアップしています。それぞれが VCL で検出され、正しいセットアップが適用されます。これは一部のサイトでは機能しますが、いくつかは同じサイトを指しています。
私はこれを読んでこれを適用しました。一部の人には機能しますが、他の人には機能しません。
たとえば、いくつかのバックエンドが定義されています。
backend site4 {
.host = "127.0.0.1";
.port = "81";
}
backend site3 {
.host = "127.0.0.1";
.port = "81";
}
backend site2 {
.host = "127.0.0.1";
.port = "81";
}
backend site1 {
.host = "127.0.0.1";
.port = "81";
}
次にvcl_recv
、ホストと正しいバックエンドを設定します。
if (req.http.host ~ "(?i)^(www.)?site1.co.uk")
{
set req.http.host = "www.site1.co.uk";
set req.backend = site1;
}
elsif (req.http.host ~ "(?i)^(www.)?site2.co.uk")
{
set req.http.host = "www.site2.co.uk";
set req.backend = site2;
}
elsif (req.http.host ~ "(?i)^(www.)?site3.com")
{
set req.http.host = "www.site3.com";
set req.backend = site3;
}
elsif (req.http.host ~ "(?i)^(www.)?site4.net")
{
set req.http.host = "www.site4.net";
set req.backend = site4;
}
www.site1.co.uk は www.site2.co.uk と同様に機能しますが、www.site3.com と www.site4.net の両方で www.site2.co.uk のコンテンツが表示されます。バックエンドを無視しているようなものです。特定のサイトに同じものを使用するだけです。
ホストは正しく設定されています。
curl -I http://site3.com
で以下を使用する場合vcl_fetch
set beresp.http.X-Host = req.http.host;
ホストが www.site3.com として正しく設定されていることがわかります
アイデアはありますか?
補足として、バックエンドを定義するより短い方法はありますか?