haproxy를 사용하여 여러 하위 도메인을 단일 백엔드로 연결 hdr(host)

단일 서버에서 실행되는 여러 응용 프로그램의 경로를 지정하기 위해 haproxy를 사용하고 있습니다. 사용중인 도메인 중 하나에 대해 수십 개의 하위 도메인이 있으며 몇 개의 응용 프로그램 중 하나에 연결되어야합니다.

현재 모든 하위 도메인을 separte 줄에 나열합니다. 내 프론트 엔드 구성은 다음과 같습니다.

frontend http-in
    bind *:80

    acl alpha     hdr(host) -i alpha.com
    acl beta      hdr(host) -i beta.com
    acl gamma00   hdr(host) -i apple.gamma.com
    acl gamma01   hdr(host) -i banana.gamma.com
    acl gamma02   hdr(host) -i cherry.gamma.com
    acl gamma03   hdr(host) -i durian.gamma.com
    acl gamma04   hdr(host) -i elderberry.gamma.com
    acl gamma05   hdr(host) -i fig.gamma.com
    acl gamma06   hdr(host) -i grapefruit.gamma.com
    acl gamma     hdr(host) -i gamma.com

    use_backend a if alpha
    use_backend b if beta
    use_backend sub1 if gamma00
    use_backend sub1 if gamma01
    use_backend sub1 if gamma02
    use_backend sub2 if gamma03
    use_backend sub2 if gamma04
    use_backend sub2 if gamma05
    use_backend sub2 if gamma06
    use_backend g if gamma

    default_backend default

더 간결한 형태로 유사한 결과를 얻는 방법이 있습니까? 그러한 목록이 효과적입니까, 아니면 어느 시점에서 정규식으로 전환하는 것이 더 좋습니까?



답변

성능을 최대로 유지하면서 (매번 적중 할 때마다 정규 표현식을 피하고) 구성을 정리하려면 여기에 ACL에 대한 외부 파일을 사용합니다. 예를 들어이라는 파일이 있다고 가정 해 보겠습니다 /etc/haproxy/sub1urls.

apple.gamma.com
banana.gamma.com
cherry.gamma.com

그런 다음 구성에서 ACL은 다음과 같습니다.

acl is_sub1 hdr(host) -i -f /etc/haproxy/sub1urls

다른 호스트를 sub2urls같은 방식으로 파일 에 넣으면 구성이 다음과 같이 줄어 듭니다.

frontend http-in
    bind *:80

    acl alpha     hdr(host) -i alpha.com
    acl beta      hdr(host) -i beta.com
    acl is_sub1   hdr(host) -i -f /etc/haproxy/sub1urls
    acl is_sub2   hdr(host) -i -f /etc/haproxy/sub2urls
    acl gamma     hdr(host) -i gamma.com

    use_backend a if alpha
    use_backend b if beta
    use_backend sub1 if is_sub1
    use_backend sub2 if is_sub2
    use_backend g if gamma

    default_backend default

따라서 다른 파일은 호스트 목록 일 뿐이므로 유지 관리가 매우 쉽습니다. 편집 할 수있는 사람 목록이 열리고 위험도 줄어 듭니다. 예를 들어, HAProxy 구성 구문을 전혀 몰라도 꼭두각시에서 이와 같은 ACL 목록을 편집하는 사람들이 있습니다.


답변