当我进行以下配置时,一个有趣的问题突然出现在我的脑海中(名称和 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>
apachectl 优雅
httpd.service Active:活动(正在运行)
测试: 我使用来自 apache 服务器的curl。
卷曲-v-khttps://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
卷曲-v-khttps://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
使用curl 时的tcpdump 确认交换正在进行中。
从我的计算机通过curl 发送请求。
卷曲-v-khttp://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:连接超时”。
当我从计算机发送请求时curl -v -khttp://testscb.local.com/
我还收到“端口 443:连接超时”。
我不明白为什么涉及路由2,感觉路由1对于apache来说不存在。
我将非常感谢您的提示。谢谢。