Drupal7、Varnish 4.0、Ubuntu 12.4
Varnishは動作するようにインストールされていますが、断続的な503を返します。Varnishがバックエンドに移動するたびに、と思います。リクエストが503を返したとしても、ページの更新が200 HITをキャッシュから返すことがあります。別のリフレッシュは200または503です。次の503はHIT-FOR-PASSだと思います。
次のように、タイムアウトを開放しました。
vcl 4.0;
backend default {
.Host = "127.0.0.1";
.port = "8080";
.probe = {
.url = "/ping";
.timeout = 600s;
.interval = 600s;
.window = 5;
.threshold = 2;
}
.first_byte_timeout = 900s; # How long to wait before we receive a first byte from our backend?
.connect_timeout = 500s; # How long to wait for a backend connection?
.between_bytes_timeout = 200s; # How long to wait between bytes received from our backend?
}
だから、ワニスが瞬く間にタイムアウトになるのではないでしょう。
おそらく問題はvclにあります。これは私が使用しているものです: https://github.com/mattiasgeniar/varnish-4.0-configuration-templates/blob/master/default.vcl
これは、同じページへの3つの連続した呼び出しのワニスログのフラグメントです:503、次に200、そして再び503:
First call - returns 503
- VCL_call BACKEND_FETCH
- VCL_return fetch
- FetchError no backend connection
- Timestamp Beresp: 1408509130.524000 0.000219 0.000219
- Timestamp Error: 1408509130.524013 0.000232 0.000013
- BerespProtocol HTTP/1.1
- BerespStatus 503
- BerespReason Service Unavailable
- BerespReason Backend fetch failed
- BerespHeader Date: Wed, 20 Aug 2014 04:32:10 GMT
- BerespHeader Server: Varnish
- VCL_call BACKEND_ERROR
- BerespHeader Content-Type: text/html; charset=utf-8
- BerespHeader Retry-After: 5
ページの更新-キャッシュから200を返しますVCL_returnハッシュ-VCL_call HASH-VCL_return lookup-ヒット2147745802-VCL_call HIT-VCL_return deliver-RespProtocol HTTP/1.1-RespStatus 200-RespReason OK
別の更新-再び503を返します。
Vclを正しく理解するための手がかりはありがたいです。
リンクしたVCLと質問の例は、1つのバックエンドのみを使用していることを示しています。この場合、ヘルスチェックを行うためにプローブを使用しても意味がありません。 Drifteaurの回答によると、プローブを無効にすると503の問題の多くが解決され、必要がないため、問題は解決されます。
ただし、複数のバックエンドでのロールアウトに向けて作業をテストしている場合は、修正する必要があります(理解)。
リンクしたVCLを見る( https://github.com/mattiasgeniar/varnish-4.0-configuration-templates/blob/master/default.vcl )これは、以下から取得した多くのセクションを使用します- https://www.varnish-software.com/ これらが正しいことを(うまくいけば)推測できるようにします。
現在、プローブはホストとポート127.0.0.1:8080で「/ ping」からの応答をチェックしているため、127.0.0.1:8080/pingになります。
設定が1つのサーバー上の複数の仮想ホストであり、ワニスが前にある場合、このようなプローブを使用しても応答が得られず(この完全なURLが構成されていない可能性が高いため)、これにより、バックエンドが「 sick/unhealthy」と表示され、503が生成されます。ワニスはバックエンドへのアクセスも試みないためです。
サーバーのセットアップであることを確認するには、プローブに以下を追加します。
backend default {
.Host = "127.0.0.1";
.port = "8080";
.probe = {
.request =
"HEAD / HTTP/1.1"
"Host: www.EXAMPLE.com"
"Connection: close";
}
}
Www.EXAMPLE.comをサーバーで使用している実際のドメインに変更する必要があります。
これにより503ではなく200が得られる場合は、サーバーの設定と同じようにプローブを使用しても互換性がないことを確認しても安全です。
プローブ情報: https://www.varnish-cache.org/docs/trunk/reference/vcl.html#reference-vcl-probes
同じ設定とDrupalで同じ問題(503)が発生しました。バックエンド構成の.probe部分をコメント化することで解決しました。なぜそれが助けになったのかわからない。