多くの同様の環境の構成をセットアップする必要があります。それぞれに、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の再構築は名前を変更するだけでした。設定をまったく同じに再作成したと確信しています。