2016-09-05 12 views

答えて

1

ここにはさまざまな手法があります。ホストアドレスに基づいてACLを設定し、それらのACLを使用してバックエンドを選択するには、変数はまったく必要ありません。それはのような単純なものになるだろう:

frontend web1 
    # ... 
    acl site1 hdr(host) -i example.com 
    acl site2 hdr(host) -i example.net 
    # ... 
    use_backend com if site1 
    use_backend net if site2 

は、すべてあなたがしようとしている、またはあなたがより洗練された何かを達成しようとしているということですか?

UPDATE:これは小文字のホストヘッダーの値を使用して、要求のコンテキストで有効な変数を設定します

frontend web1 
    # .. 
    http-request set-var(req.s1) req.hdr(Host),field(1,:),lower,regsub(\.,_,g) 
    use_backend %[var(req.s1)] 

backend example_com 
    # .. 

backend example_net 
    # .. 

ピリオドを持つ:ここでは、ホストヘッダーに基づいて、バックエンドを選択する方法ですアンダースコアに置き換えられました。ホストヘッダーと一致するバックエンドが見つからない場合

frontend web1 
    # .. 
    use_backend %[req.hdr(Host),field(1,:),lower,regsub(\.,_,g)] 

HAproxyは503を返します:実際に、あなたも、変数は必要ありません。そのような要求を別の場所に移動したい場合は、default_backendを設定することができます(私はこれをテストし、少なくとも1.6.3で動作します)。

+0

それはいくつかのアプリ/サイトのリストについてはありません。複数の未知の "バックエンド"が存在する可能性があります。すべての要求をHTTPホストヘッダー(IP /ドメイン)に動的にリダイレクトする必要があります。 – aristit

+0

@aristitまあ、実行時にすべてのバックエンドをhaproxy.cfgに列挙しなければならないので、 "未知の"バックエンドを持つことはできません。 HAproxyが存在しないバックエンドを使用しないようにするには、既知のバックエンドのリストに対してHostヘッダーをチェックする必要があります。より大きな問題は、 'use_backend'の最初の引数として変数を補間できるかどうかわかりません。私はそれと一緒に遊ぶよ... – mwp

+0

@aristitそれはそれが起こっていると思ったようにそれは悪くはなかった!見て、これがあなたのニーズを満たすかどうかを見てください。 – mwp

関連する問題