haproxy를 사용하는 동일한 VPN의 여러 사이트 관련 문제

haproxy를 사용하는 동일한 VPN의 여러 사이트 관련 문제

설정

VPS제가 사용하고 있는 것이 있습니다 docker. 현재 3개의 컨테이너가 있습니다. 1개는 haproxy용이고 나머지 2개 컨테이너에는 개별 사이트가 포함되어 있습니다(포트 8080에서 nodejs http 서버 실행).

다음과 같은 도메인과 하위 도메인이 있습니다.

  • mydomain.com
  • deus.ex.machina.mydomain.com
  • fela.mydomain.com

mydomain.com두 노드 서버 중 첫 번째 노드 서버로 이동하고 fela.mydomain.com다른 노드 서버로 이동하고 싶습니다 . 세 번째 도메인은 deus.ex.machina.mydomain.com존재하지 않는 IP 주소로 이동하여 서버가 다운되는 것을 시뮬레이션하여 503 페이지가 표시되는지 확인해야 합니다.

여기 나의 haproxy.cfg:

global
    log 127.0.0.1 local0 notice
    maxconn 2000
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option http-server-close
    timeout connect 5000
    timeout client  10000
    timeout server  10000

listen stats
    bind       :1988
    stats uri /

frontend http-in
        bind *:80

        # define hosts
        acl host_deusexmachina  hdr_beg(host) -i deus.ex.machina.mydomain.com
        acl host_fela           hdr_beg(host) -i fela.mydomain.com
        acl host_mydomain       hdr_beg(host) -i mydomain.com

        # figure out which one to use
        use_backend deusexmachina_cluster   if host_deusexmachina
        use_backend fela_cluster            if host_fela
        use_backend mydomain_cluster        if host_mydomain

backend deusexmachina_cluster

        balance roundrobin
        cookie SERVERID insert indirect nocache

        server deusexmachina_s1 172.17.0.99:8080 check cookie deusexmachina_s1

backend fela_cluster

        balance roundrobin
        cookie SERVERID insert indirect nocache

        server fela_s1 172.17.0.59:8080 check cookie fela_s1

backend mydomain_cluster

        balance roundrobin
        cookie SERVERID insert indirect nocache

        server mydomain_s1 172.17.0.50:8080 check cookie mydomain_s1
  • 172.17.0.50:8080이 작동 중입니다(포트 8080의 nodejs).
  • 172.17.0.59:8080이 작동 중입니다(포트 8080의 nodejs).
  • 172.17.0.99:8080이 작동하지 않습니다(nodejs 다운 시뮬레이션).

세 가지 모두에 대한 모든 요청은 동일한 IP 주소(동일한 장치)에서 나오므로 option http-server-close.

문제

그러면 다음과 같은 질문이 남습니다.이슈가 뭐야?

그들은 약 90%의 시간 동안 올바르게 리디렉션하고 있습니다.

  • 연결하고 mydomain.com새로 고침 버튼을 10번 중 9번 누르면 올바른 페이지(172.17.0.50:8080)가 표시되고, 1번의 홀수 시간에는 503이 표시됩니다(마치 서버로 연결되었거나 deus.ex.machina.mydomain.com서버인 것처럼? 이것을 확인하는 방법을 모릅니다).

  • fela.mydomain.com새로 고침 버튼을 누르면 10번 중 9번은 올바른 페이지(172.17.0.59:8080)가 표시되고, 1번은 (503 페이지 아님) 페이지(172.17.0.50:8080)가 표시 됩니다 mydomain.com.

  • 새로 고침 버튼을 누를 때도 마찬가지입니다 deus.ex.machina.mydomain.com. 10번 중 9번은 올바른 페이지(503 오류)가 표시되고, 1번은 mydomain.com(503 페이지 아님) 페이지(172.17.0.50:8080)가 표시됩니다.

추가하면 option httpclose잘못된 페이지로 리디렉션될 확률이 50/50으로 더욱 악화됩니다.

동일한 Chrome 브라우저의 탭에 3개의 도메인이 모두 열려 있고 도메인 간에 전환하고 새로 고칩니다.

haproxy가 요청을 혼동하고 있다고 의심됩니까? 아마도 IP 요청이 어느 백엔드로 이동해야 하는지 캐싱하고 있을까요? 표시된 대로 요청을 올바른 서버로 전달하는 쿠키를 사용하고 있습니다(클라이언트 쿠키를 확인했는데 모두 순서대로 되어 있습니다). 나는 지금 몇 시간 동안 이 일을 해왔고, 무엇을 더 시도해야 할지 잘 모르겠습니다.

관련 정보