하위 도메인 설정을 사용한 Haproxy 설정


8

누군가가 이것이 작동하는지 확인하는 데 도움이되기를 바랍니다. 3 개의 하위 도메인 트래픽을 동일한 haproxy 호스트로 라우팅하려고합니다.

여기 내 설정입니다

하나의 인터페이스 IP 10.10.10.100 및 DNS 이름 haproxy01.mydomain.com을 사용하는 haproxy

연관된 CNAME 레코드 3 개; sub1.mydomain.com, sub2.mydomain.com 및 sub3.mydomain.com

들어오는 모든 트래픽은 포트 443에 대한 것입니다.

3 개의 포트 8081, 8082, 8083에서 트래픽을 허용하는 2 개의 백엔드 애플리케이션 서버가 있습니다.

8081의 경우 sub1.mydomain.com 8082의 경우 sub2.mydomain.com 및 8083의 경우 sub3.mydomain.com

이 응용 프로그램은 포트 8081 트래픽에만 SSL 통과가 필요하므로 tcp 모드를 사용해야한다고 생각합니다 .8082 및 8083의 다른 트래픽도 SSL이지만 Haproxy에서 종료 될 수 있지만 테스트를 위해 모든 TCP를 사용했습니다. 방법.

이를 달성하기위한 구성 섹션은 다음과 같습니다.

    #Application Setup 
frontend mytraffic
    bind *:443
    mode  tcp
    acl host_sub1 hdr(host) -i sub1.mydomain.com
    acl host_sub2 hdr(host) -i sub2.mydomain.com
    acl host_sub3 hdr(host) -i sub3.mydomain.com

    use_backend sub1_nodes if host_sub1
    use_backend sub2_nodes if host_sub2
    use_backend sub3_nodes if host_sub3

    option tcplog backend sub1_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8081 check
    server node2 10.10.10.102:8081 check 
backend sub2_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8082 check
    server node2 10.10.10.102:8082 check 
backend sub3_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8083 check
    server node2 10.10.10.102:8083 check


    # APPLICATION SETUP END

예를 들어 8082 트래픽과 같은 HAproxy를 통해 어플리 케이 션 서버에 액세스하려고하면 이것이 로그가됩니다.

localhost haproxy [6097] : xxxx : 51241 [20 / Mar / 2015 : 12 : 19 : 38.720] mytraffic mytraffic / -1 / -1 / 0 SC 0/0/0/0/0 0/0

이 설정에 대한 몇 가지 지침에 감사드립니다.

추신 : 첫 번째 게시물이므로 명확성을 위해 이미지를 포함 할 수 없습니다 :-(


로그 메시지가 완료되지 않았습니다. 3 월 20 일 12:19:38 localhost haproxy [6097] : xxxx : 51241 [20 / Mar / 2015 : 12 : 19 : 38.720] mytraffic mytraffic / <NOSRV> -1 / -1 / 0 SC 0 / 0 / 0 / 0/0 0/0
글로벌 학습

NOSRV는 적합한 백엔드를 찾을 수 없음을 의미합니다. 통계 페이지 나 소켓에 액세스하여 HAproxy가 생각하는 백엔드를 확인할 수 있습니까?
Jim G.

또한 haproxy와 애플리케이션 서버 사이에 연결이 있는지 확인하십시오. nc를 사용하는 경우 : nc -v 10.10.10.101 8081, nc -v 10.10.10.102 8081 등
hdanniel

haproxy 모니터링 대시 보드의 마지막 점검은 모든 노드를보고합니다. 또한 Haproxy 콘솔에서 모든 포트의 이러한 응용 프로그램 서버로의 연결을 확인했습니다.
글로벌 학습

@HD 예, 두 노드 모두에서 연결 상태가 양호합니다.
글로벌 학습

답변:


11

TCP 모드를 사용하면 HAProxy는 HTTP 요청을 디코딩하지 않으므로 acl 하지 않으므로 입력 한 로그에 표시된 것처럼 회선이 아무것도 수행하지 않으며 프런트 엔드는 백엔드와 일치 mytraffic/<NOSRV>하지 않습니다. 백엔드 또는 서버.

3 개의 하위 도메인을 포트 443에서 모두 연결하기 때문에 각각 고유 한 IP를 갖는 2 개의 서로 다른 프런트 엔드로 분할해야합니다. 하나는 패스 스루, 다른 하나는 SSL 종료 및 mode http 됩니다. 여기서 통과 할 필요가있는 네 번째 하위 도메인 (sub4.mydomain.com)을 추가하려면 세 번째 프런트 엔드와 IP가 필요하다는 점에주의해야합니다.

또한 올바른 하위 도메인이 올바른 IP를 가리 키도록 DNS에서 다른 CNAME 또는 A 레코드를 만들어야합니다.

이 DNS 구성이 주어지면 :

10.10.10.100        A         haproxy01-cs.mydomain.com
10.10.10.101        A         haproxy01-pt1.mydomain.com
10.10.10.102        A         haproxy01-pt2.mydomain.com
sub1.mydomain.com   CNAME     haproxy01-pt1.mydomain.com
sub2.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub3.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub4.mydomain.com   CNAME     haproxy01-pt2.mydomain.com

HAproxy 구성은 다음과 같습니다.

#Application Setup 
frontend ContentSwitching

  bind 10.10.10.100:443
  mode  http
  option httplog
  acl host_sub2 hdr(host) -i sub2.mydomain.com
  acl host_sub3 hdr(host) -i sub3.mydomain.com
  use_backend sub2_nodes if host_sub2
  use_backend sub3_nodes if host_sub3

frontend PassThrough1
  bind 10.10.10.101:443
  mode  tcp
  option tcplog
  use_backend sub1_nodes     

frontend PassThrough2
  bind 10.10.10.102:443
  mode  tcp
  option tcplog
  use_backend sub4_nodes

backend sub1_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8081 check
  server node2 10.10.10.102:8081 check 

backend sub2_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8082 check
  server node2 10.10.10.102:8082 check 

backend sub3_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8083 check
  server node2 10.10.10.102:8083 check

backend sub4_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8084 check
  server node2 10.10.10.102:8084 check

실제로, 내가 가진 IP는 이해가되지 않습니다 (노드에 할당 된 프런트 엔드에는 10.10.10.101-102를 사용했습니다). 그러나 어떻게 보이는지 알 수 있습니다.
GregL

@GreL-감사합니다. 나는 이것을 시도하고 결과로 동그라미를 칠 것입니다. 사용하기 전에 tcp 모드와 acl 사용이 걱정되었습니다.
글로벌 학습

고마워 GregL. 효과가있다. 마지막 질문 하나? 클라이언트-> haproxy 및 haproxy-> 백엔드 서버에서 SSL을 사용하려면 (종료 할 수는 있지만 백엔드에서 새 서버를 시작할 수 있음) 권장되는 방법은 무엇입니까? SSL은 TCP 모드로 통과? 포트 8081 트래픽의 통과를 원했던 이유는 응용 프로그램 및 클라이언트와 상호 인증 된 세션이 필요하기 때문입니다. 나머지 포트 8082 및 8083 트래픽에는 SSL이 필요하지만 상호 인증은 필요하지 않습니다. (지금은 패스 스루 접근 방식을 사용했습니다).
글로벌 학습

HAProxy는 명령문에 ca-fileverify optional옵션을 사용하여 클라이언트 인증서 검사를 수행 할 수 있습니다 bind. 그렇게 한 경우 단일 프런트 엔드를 하나의 IP에 바인딩 한 다음 호스트 헤더에 필요한대로 적절한 백엔드로 콘텐츠를 전환 할 수 있습니다. 상호 인증이 작동하는지 확인하기 위해 acl과 같은 acl을 생성 한 acl ClientSSLValid ssl_c_verify 0후 다음 use_backend과 같은 명령문에 다른 조건으로 추가 할 수 있습니다.use_backend sub1_nodes if host_sub1 ClientSSLValid
GregL

괜찮은 쓰기 - 업있어 여기여기에 내가 제공 한 것보다 더 많은 세부 사항이 작업을 수행하는 방법에 대한이.
GregL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.