Apache 장애 조치 BalanceMember

Apache 장애 조치 BalanceMember

다음 구성을 수행할 때 흥미로운 질문이 머리 속에 떠올랐습니다(이름과 IP는 가상입니다).

배경:

route 1 - 10.10.10.10 is an IPSec tunnel
route 2 - 20.20.20.20 to the Internet
original service URL (nginx) - https://testscb.com - work
Virtual apache server (another machine, not mine) DNS - testscb.local.com

기본 경로 1을 사용할 수 없는 경우 모든 트래픽이 경로 2로 이동하는지 확인하고 싶습니다. 통신 채널이 복원되면 경로 1로 돌아갑니다.

내 설정:

/etc/호스트

10.10.10.10 testw1.com testscb1.com
20.20.20.20 testw2.com testscb2.com

포트 443이 열려 있습니다.

traceroute to testscb1.com (10.10.10.10), 30 hops max, 60 byte packets
7  testscb1.com (10.10.10.10)  2.955 ms  2.985 ms  2.839 ms

traceroute to testscb2.com (20.20.20.20), 30 hops max, 60 byte packets
4  testscb2.com (20.20.20.20)  1.731 ms  1.834 ms  2.244 ms

/etc/httpd/virtual_host/testscb.conf

<VirtualHost *:80>
ServerName testscb.local.com

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
#ProxyHCExpr gdown {%{REQUEST_STATUS} =~ /^[5]/}

#  BalanceMember in /etc/hosts
  <Proxy "balancer://testscb">
    BalancerMember https://testscb1.com hcmethod=HEAD hcexpr=ok234 hcinterval=20 hcuri=/test hcfails=4 hcpasses=4 
    BalancerMember https://testscb2.com hcmethod=HEAD hcexpr=ok234 hcinterval=20 hcuri=/test hcfails=4 hcpasses=4 status=+H
    ProxySet stickysession=JSESSIONID
    ProxySet lbmethod=heartbeat
  </Proxy>

    ProxyPass "/" "balancer://testscb/"
    ProxyPassReverse "/" "balancer://testscb/"

<Location "/">
    ProxyPass "https://testscb.com/"
    ProxyPassReverse "https://testscb.com/"
    AllowOverride None
    Order Deny,Allow
    Deny from All
    Allow from All
</Location>

LogLevel debug
ErrorLog /var/log/httpd/testscb-error_log
CustomLog /var/log/httpd/testscb-access_log combined
</VirtualHost>

아파치 우아한

httpd.service 활성: 활성(실행 중)

시험: 나는 아파치 서버에서 컬을 사용합니다.

컬-vkhttps://testscb1.com/

* Mark bundle as not supporting multiuse
< 
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host testscb1.com left intact

컬-vkhttps://testscb2.com/

* Mark bundle as not supporting multiuse
< 
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host testscb2.com left intact

컬을 사용하는 tcpdump는 교환이 진행 중임을 확인합니다.

내 컴퓨터에서 컬을 통해 요청을 보냅니다.

컬-vkhttp://testscb.local.com/

* Mark bundle as not supporting multiuse
< 
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host testscb.local.com left intact

하지만 경로 2가 사용되는 것으로 나타났습니다. 백업으로 사용해야 하지만(tcpdump 참조).

더욱 흥미롭습니다. 통신 링크 실패를 테스트하기 위해 경로를 반대로 바꾸고 있습니다.

ip ro add 20.20.20.20 via 127.0.0.1

이제 컬 -v -khttps://testscb2.com/"포트 443: 연결 시간 초과" 오류가 발생합니다.

내 컴퓨터에서 요청을 보낼 때 컬 -v -khttp://testscb.local.com/

또한 "포트 443: 연결 시간이 초과되었습니다"라는 메시지가 표시됩니다.

루트 2가 왜 포함되어 있는지 이해가 되지 않습니다. 아파치에는 루트 1이 존재하지 않는 것 같습니다.

귀하의 조언에 매우 감사하겠습니다. 감사해요.

관련 정보