>

HAProxy에서 이상한 행동을하고 있습니다. example.com/wiki가 한 서버로 이동하고 example.com/이 다른 서버로 이동할 수 있도록 다음과 같은 설정이 있습니다. 문제는/wiki가 절반 만 작동하고/webserver는 절반 만 작동하는 것처럼 보입니다. 자세히 살펴보면 두 백엔드 사이를 전환하는 것처럼 보입니다. ACL 규칙에 따라 특정 백엔드로 이동하는 대신로드 밸런싱 가능성이 있습니다!

또 다른 이상한 점은 services-staging.example.com/greenoven과 staging.example.com이 모두 금귤에 빠질 것입니다. 규칙에 따르면 서비스 준비 호스트 만 백엔드로 이동해야한다는 규칙이 있습니다.

p>

HAProxy 구성에 문제가 있습니까? acls 또는 백엔드를 잘못 사용하고 있습니까?

global
        log 127.0.0.1   local1 debug
        maxconn 200000
        chroot /var/lib/haproxy
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet
defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 200000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
        stats uri /monitor
        stats auth admin:GS01
        stats refresh 5s
        stats enable

frontend http-in
        bind *:80
        option forwardfor
        #Staging Hosts
        acl host_staging hdr(host) -i staging.example.com
        acl host_staging_services hdr(host) -i staging-services.example.com
        #Production Hosts
        acl host_prod hdr(host) -i example.com www.example.com
        acl host_prod_services hdr(host) -i services.urbanatla.com
        #URL Paths
        acl url_wiki url_beg /wiki
        acl url_go   url_beg /greenoven
        acl url_arcgis url_beg /ArcGIS
        #Staging Backends
        use_backend pluto if host_staging_services url_arcgis
        use_backend kumquat if host_staging_services url_go
        use_backend kumquat if host_staging url_wiki
        use_backend cumberland if host_staging
        #Production Backends
        use_backend saturn if host_prod_services url_arcgis
        use_backend willow if host_prod_services url_go
        use_backend willow if host_prod url_wiki
        use_backend ganges if host_prod

backend kumquat
        server kumquat kumquat.example.com:8080 maxconn 5000
backend cumberland
        server cumberland cumberland.example.com:80 maxconn 5000
backend ganges
        server ganges ganges.example.com:80 maxconn 5000
backend articdata
        server articdata  articdata.example.com:80 maxconn  5000
backend saturn
        server saturn saturn.example.com:80 maxconn 5000
backend willow
        server willow willow.example.com:8080 maxconn 5000
backend pluto
        server pluto pluto.example.com:80 maxconn 5000       

  • 답변 # 1

    연결을 재사용하고있는 것 같습니다. 컨텍스트 전환을 할 때는하지 말아야합니다. 다음을 추가했습니다 :

    option httpclose
    
    

    이 게시물 당 : HAProxy 컨텐츠 전환 구성에서 오류가 발생하는 이유는 무엇입니까?

    모든 URL 및 도메인이 이제 올바르게 작동합니다.

  • 답변 # 2

    haproxy 설명서를 읽으면 다음 단락을 찾을 수 있습니다.

    hdr(name)   The HTTP header <name> will be looked up in each HTTP request.
                Just as with the equivalent ACL 'hdr()' function, the header
                name in parenthesis is not case sensitive. If the header is
                absent or if it does not contain any value, the roundrobin
                algorithm is applied instead.
    
    

    이것은 haproxy가 ACL을 따르지 않는 서버간에로드 밸런싱을 수행하는 이유를 설명 할 수 있습니다. 확실하게 host 에 요청을 받고 있는지 확인해야합니다.  헤더.

    host 를 확인하는 대신 대상 IP, 이름 또는 URL을 사용할 수 있다고 생각합니다  헤더.

  • 이전 windows 7 - 내 VM에서 VM 구성의 모든 필드가 비활성화 된 이유는 무엇입니까?
  • 다음 ntp를 사용하여 Linux에서 시간을 동기화하고 유지하십시오