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
...しかし、どちらも機能しませんでした。
ありがとう
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"
hdr_end
はあなたが探しているものです。これを試して:
acl valid_domains hdr_end(Host) -i mysite.com
redirect location http://mysite.com/invalid_domain if !valid_domains
複数のレベルのサブドメインを使用したワイルドカード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