4

私はかなり洗練されたワニス構成を持っています。ディレクターを実際に使用してルートを手動で実行することはできません。

//webservice1 and webservice2 has probes working there

set req.backend = webservice1;
if (req.backend.healthy)
{ 
     #redirect there 
}

set req.backend = webservice2;
if(req.backend.healthy)
{ 
     #change parameters with regex and redirect
}

これは機能します。しかし、本当に不自由に見えます。

バックエンドが正常かどうかを確認する「合法的な」方法はありますか? このような:

if(webservice2.healthy)
{ 
     #change parameters with regex and redirect
}

これは明らかに機能していません。

4

2 に答える 2

2

グーグルで何度も検索した後、V4への移行について話しているこのリンクを見つけました。

コード :

if(!req.backend.healthy) {
  #your logic
}

ニス 3 には有効で、ニス 4 には有効ではありません。

ワニス 4 の場合:

こちらをご覧ください: https://www.varnish-cache.org/docs/4.0/users-guide/vcl-grace.html#users-guide-handling-misbehaving-servers

したがって、解決策は次のようになります。

import std;
set req.backend_hint = webservice1;
if (!std.healthy(req.backend_hint)) {
    set req.backend_hint = webservice2;
}

これがお役に立てば幸いです:)

于 2015-09-19T21:32:31.957 に答える
1

私はこれについて多くの調査を行ってきましたが、これがそれを達成する唯一の方法です (vmod を作成したい場合を除きます)。

病気でない限り、常に webservice1 で応答したいと仮定すると、少しリファクタリングすることをお勧めします。

set req.backend = webservice1;
if(!req.backend.healthy) {
     set req.backend = webservice2;
     #change parameters with regex
}
# redirect here
于 2015-05-28T18:49:46.627 に答える