0

多くの同様の環境の構成をセットアップする必要があります。それぞれに、env1、env2 などのパターンに従う異なるホスト名があります。

環境ごとにプールを使用し、ホスト名に基づいてプールを選択する irule を使用して単一の仮想サーバーを使用できます。

私がやりたいのは、switch ステートメントですべてのプールを一覧表示するのではなく、要求されたホスト名に基づいてプール名を動的に生成して選択することです。メンテナンスが容易になり、新しい環境を自動的に処理します。

コードは次のようになります。

when HTTP_REQUEST {
  pool [string tolower [HTTP:host]]
}

各プール名はホスト名と一致します。

これは可能ですか?それとももっと良い方法がありますか?

編集

ホスト名プールの選択を拡張しました。現在、ポート番号を含めようとしています。新しいルールは次のようになります。

when HTTP_REQUEST {
  set lb_port "[LB::server port]"
  set hostname "[string tolower [getfield [HTTP::host] : 1]]"
  log local0.info "Pool name $hostname-$lb_port-pool"
  pool "$hostname-$lb_port-pool"

}

これは機能していますが、どういうわけかポート 0 の要求がプールに入ってきているため、ログに no-such-pool エラーが表示されます。最初のリクエストのようで、その後に正当なポートを使用したリクエストが続きます。

Wed Feb 17 20:39:14 EST 2016    info    tmm tmm[6519]       Rule /Common/one-auto-pool-select-by-hostname-port <HTTP_REQUEST>: Pool name my.example.com-80-pool
Wed Feb 17 20:39:14 EST 2016    err tmm1    tmm[6519]   01220001    TCL error: /Common/one-auto-pool-select-by-hostname-port <HTTP_REQUEST> - no such pool: my.example.com-0-pool (line 1) invoked from within "pool "$hostname-$lb_port-pool""
Wed Feb 17 20:39:14 EST 2016    info    tmm1    tmm[6519]       Rule /Common/one-auto-pool-select-by-hostname-port <HTTP_REQUEST>: Pool name my.example.com-0-pool

ポート 0 要求の原因は何ですか? そして、回避策はありますか?たとえば、ポート 0 をテストして、デフォルトのポートを選択するか、それを無視できますか?

もう1つの編集

仮想サーバーを再構築したところ、エラーはなくなりました。ただし、VSの再構築は名前を変更するだけでした。設定をまったく同じに再作成したと確信しています。

4

2 に答える 2

3

はい、プール名を文字列で指定できます。同じ名前のプールがある限り、そこにあるものは機能します。この方法の例は示されていませんが、詳細については、 DevCentralのプールwiki ページを確認することもできます。

余談ですが、私の環境では、通常、_pool構成ファイルを見るときに他のオブジェクトと区別するために、接尾辞を付けてプールを作成します。したがって、私の iRules では、次のようなことを行います (本質的に同じことです)。

when HTTP_REQUEST {
    pool "[string tolower [HTTP::host]]_pool"
}
于 2016-02-10T12:34:08.077 に答える