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

도메인이 두 개인 경우 어떻게해야합니까? 하나는 mysite.com이고 다른 하나는 notmysite.com입니까? 둘 다 mysite.com으로 끝납니다. 경기는 구체적이지 않습니다. 맞습니까?
Saab

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.