web-dev-qa-db-ja.com

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

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

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

ありがとう

9
Tom

hdr_sub があなたのニーズに適していると思います。しばらくhdr_endを使用していましたが、次の問題が発生します。

通常、ポート80のリクエストではポートが取り除かれるので、Hostヘッダーは「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"
15
Rj Wilson

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

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

複数のレベルのサブドメインを使用したワイルドカード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

およびwillnotmatch

  • example.org
  • two.subs.example.org
  • myexample.org
  • test.myexample.org
  • test.example.org.other.com
5
gregmac