HAproxyのACLリストでワイルドカードホストを照合するにはどうすればよいですか?


10

haproxy.confに次の行があります。

acl valid_domains hdr(Host) -i mysite.com images.mysite.com docs.mysite.com admin.mysite.com
redirect location http://mysite.com/invalid_domain if !valid_domains

サブドメインを一致させるにはどうすればよいですか?

私は試した:

acl valid_domains hdr(Host) -i *.mysite.com

そして:

acl valid_domains hdr(Host) -i [a-z]+.mysite.com

...しかし、どちらも機能しませんでした。

ありがとう

回答:


15

私はそれを感じるhdr_subは、ニーズのためのより良いです。しばらくhdr_endを使用していましたが、次の問題が発生しました:

通常、ポート80のリクエストではポートが取り除かれるので、ホストヘッダーは「example.com」のようになりますが、example.com:8080のようにポートで明示的にリクエストした場合、ヘッダーにはポートがあり、hdr_endは失敗します「example.com」を確認してください。

hdr_subは、部分文字列の一致を行います。これは、あなた(そして私)に適しているようです。

どちらの解決策にも、私が気に入らない厄介なことがまだあります。結果の順序依存評価。

例(私のフロントエンドでの条件は次のようになります)

acl is_dbadmin hdr_sub(host) -i dbadmin.example.com

ポート8080でのリクエストは次のようになります。

Jul  9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {**example.com:8080**||http://example.com:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

ポート80はおそらくこのようになる可能性があるため

Jul  9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {example.com||***http://example.com***:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

12

hdr_endあなたが探しているものです。これを試して:

acl valid_domains hdr_end(host) -i mysite.com 
redirect location http://mysite.com/invalid_domain if !valid_domains

2つのドメインがある場合はどうでしょうか。1つはmysite.comと呼ばれ、もう1つはnotmysite.comと呼ばれますか?両方ともmysite.comで終わります。だから、試合は具体的ではありませんよね?
サーブ

1
@Saabその場合、私はacl valid_domains hdr(host) -i mysite.com+ と書くacl valid_domains hdr_end(host) -i .mysite.comか、または単に使用しますacl valid_domains hdr_dom(host) -i mysite.com
howanghk

7

複数のレベルのサブドメインを持つワイルドカードSSLのリダイレクトの処理など、これについて明示的にする必要がある場合があります。

一致する終了(hdr_endまたは-m end)または部分文字列(hdr_subまたは-m sub)には、予期した以上の一致の予期しない副作用が生じる可能性があります。多くの場合、これらのドメインへのトラフィックがサーバーに到達しないため、これは実際には問題になりませんが、技術的に正しいソリューションであるとは限りません。

正規表現を使用することは、明示的なマッチングを行うために私が見つけた最良の方法です。たとえば、一致*.example.orgせずにのみ一致させたい場合sub.domain.example.org

acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org$

(任意の)非標準ポートも処理する場合は、これを少し拡張できます。

acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org(:[0-9]+)?$

上記は一致します:

  • test1.example.org
  • test2.example.org:8080

そして、なりません一致します

  • example.org
  • two.subs.example.org
  • myexample.org
  • test.myexample.org
  • test.example.org.other.com
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.