HAProxyに問題があります。これは、以下のhaproxy.cfgのスニペットです。
acl url_a path_beg /a
acl dom_eye hdr_dom(Host) -i www.mydomin.com
use_backend eye1 if dom_eye
use_backend eye2 if dom_eye url_a
しかし、私はすべてのURLが/ aで始まると予想します。eye2を使用してください。
そして、以下のようにse_backendの順序を切り替えると、
acl url_a path_beg /a
acl dom_eye hdr_dom(Host) -i www.mydomin.com
use_backend eye2 if dom_eye url_a
use_backend eye1 if dom_eye
それは私のために働いた。
しかし、Haproxyの「一致順序ルール」が理解できず、googleからの説明が見つかりません。
これに関するアイデアはありますか?
なぜ機能しないのかはわかりませんが、HAProxyのドキュメントには次のように記載されています。
「use_backend」ルールは必要な数だけ存在できます。これらのルールはすべて宣言順に評価され、一致した最初のルールがバックエンドを割り当てます。
From: http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#4-use_backend
コードを見る:
acl url_a path_beg /a
acl dom_eye hdr_dom(Host) -i www.mydomin.com
use_backend eye1 if dom_eye
use_backend eye2 if dom_eye url_a
次の結果を期待します。
www.mydomin.com -> eye1
www.mydomin.com/a -> eye1
www.mydomin.com/a/b -> eye1
それらすべてが最初のuse_backend
に一致するためです。
設定を次のように変更した場合:
acl url_a path_beg /a
acl dom_eye hdr_dom(Host) -i www.mydomin.com
use_backend eye2 if dom_eye url_a
use_backend eye1 if dom_eye
私はこれらの結果を期待します:
www.mydomin.com -> eye1
www.mydomin.com/a -> eye2
www.mydomin.com/a/b -> eye2
URL 2と3だけが最初のuse_backend
に一致するためです。
これはあなたの設定で何が起こっているのではないことを確認できますか?