2

いくつかのバックエンドをセットアップしています。それぞれが VCL で検出され、正しいセットアップが適用されます。これは一部のサイトでは機能しますが、いくつかは同じサイトを指しています。

私はこれを読んでこれを適用しました。一部の人には機能しますが、他の人には機能しません。

Varnish を使用して複数のサイトを構成する

たとえば、いくつかのバックエンドが定義されています。

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 として正しく設定されていることがわかります

アイデアはありますか?

補足として、バックエンドを定義するより短い方法はありますか?

4

3 に答える 3

2

ところで、同じバックエンド サーバーにサイトがある場合、それぞれの新しいバックエンドを定義する必要はありません。

于 2012-08-22T19:08:44.437 に答える
1

編集:私の最初の答えは間違っていました。私は質問を誤解しました。

私がお勧めするのは、バックエンドによって異なる理由をデバッグして理解することです:

  • if ステートメントの後にすべてのキャッシュreturn pass;を無効にするvcl_recv
  • リクエストを実行するときにvarnishlogを実行します

それは役立つはずです

于 2012-08-29T11:38:58.407 に答える
0

機能していなかったサイトについては、新しい Apache ポートを VirtualHost エントリに追加していませんでした。

私が持っていた

<VirtualHost *:80>

する必要があった

<VirtualHost *:80 *:81>

新しい Apache ポートで作業するには

于 2012-08-22T08:07:05.680 に答える